9. Funksiyalar

Dasturimiz kattalashgani sari kod ham ko‘payadi.

Masalan, biror amalni bir necha marta bajarishimiz kerak bo‘lsa, bir xil kodni qayta-qayta yozish yaxshi emas.

Buning o‘rniga funksiyalardan foydalanamiz.

Funksiya — ma'lum bir vazifani bajaradigan kodlar to‘plami.


Funksiya nima?

Masalan, ikkita sonni qo‘shadigan funksiya yaratishimiz mumkin:

int qoshish(int a, int b) {
    return a + b;
}

Keyin uni:

qoshish(10, 20);

deb chaqirishimiz mumkin.

Natija:

30

Eng oddiy funksiya

Avval hech qanday qiymat qaytarmaydigan funksiya yaratamiz.

void salom() {
    cout << "Salom!";
}

Bu funksiya Salom! chiqaradi.

Uni ishlatish uchun:

salom();

deb chaqiramiz.

To‘liq dastur:

#include <iostream>

using namespace std;

void salom() {
    cout << "Salom!";
}

int main() {
    salom();

    return 0;
}

Natija:

Salom!

Funksiyani chaqirish

Funksiya yaratishning o‘zi uni ishlatmaydi.

Masalan:

void salom() {
    cout << "Salom!";
}

Bu yerda funksiya yaratildi.

Uni bajarish uchun:

salom();

deb chaqirish kerak.


Funksiya nega kerak?

Tasavvur qiling, siz Salom! matnini 10 marta chiqarishingiz kerak.

Funksiyasiz:

cout << "Salom!";
cout << "Salom!";
cout << "Salom!";
...

Funksiya bilan:

void salom() {
    cout << "Salom!";
}

Keyin:

salom();
salom();
salom();

Kod ancha tartibli bo‘ladi.


Funksiyaga ma'lumot berish

Funksiyaga ma'lumot yuborish mumkin.

Masalan:

void salom(string ism) {
    cout << "Salom, " << ism;
}

Endi:

salom("Ali");

Natija:

Salom, Ali

Yoki:

salom("Vali");

Natija:

Salom, Vali

Parametr

Quyidagi funksiyada:

void salom(string ism) {
    cout << "Salom, " << ism;
}

ismparametr.

Funksiyani chaqirganda:

salom("Ali");

"Ali" esa funksiyaga berilgan qiymat.


Bir nechta parametr

Funksiyada bir nechta parametr bo‘lishi mumkin.

Masalan:

void tanishtir(string ism, int yosh) {
    cout << "Ism: " << ism << endl;
    cout << "Yosh: " << yosh;
}

Chaqirish:

tanishtir("Ali", 18);

Natija:

Ism: Ali
Yosh: 18

Qiymat qaytaradigan funksiya

Funksiya faqat ekranga ma'lumot chiqarishi shart emas.

U bizga qiymat qaytarishi ham mumkin.

Masalan:

int qoshish(int a, int b) {
    return a + b;
}

Bu funksiya ikkita sonni qo‘shib, natijani qaytaradi.

Keyin:

int natija = qoshish(10, 20);

Natijada:

natija = 30

bo‘ladi.


return

return funksiya natijasini qaytarish uchun ishlatiladi.

Masalan:

int kvadrat(int son) {
    return son * son;
}

Agar:

kvadrat(5);

deb chaqirsak, natija:

25

bo‘ladi.


void

Agar funksiya hech qanday qiymat qaytarmasa, void ishlatiladi.

Masalan:

void salom() {
    cout << "Salom!";
}

Bu funksiya faqat ish bajaradi.

Hech qanday qiymat qaytarmaydi.


int bilan void farqi

int:

int qoshish(int a, int b) {
    return a + b;
}

Bu int qiymat qaytaradi.

void:

void salom() {
    cout << "Salom!";
}

Bu hech qanday qiymat qaytarmaydi.

Oddiy qilib:

int   → qiymat qaytaradi
void  → qiymat qaytarmaydi

Funksiyani main() dan oldin yozish

Funksiyani main() dan oldin yozish mumkin.

#include <iostream>

using namespace std;

int qoshish(int a, int b) {
    return a + b;
}

int main() {
    cout << qoshish(10, 20);

    return 0;
}

Natija:

30

Funksiyani main() dan keyin yozish

Funksiyani main() dan keyin ham yozish mumkin.

Lekin bu holda C++ ga funksiya haqida oldindan aytishimiz kerak.

Buning uchun function declaration ishlatiladi.

#include <iostream>

using namespace std;

int qoshish(int a, int b);

int main() {
    cout << qoshish(10, 20);

    return 0;
}

int qoshish(int a, int b) {
    return a + b;
}

Bu yerda:

int qoshish(int a, int b);

funksiya e'lonidir.

Hozircha funksiyalarni main() dan oldin yozish biz uchun osonroq.


Funksiya yordamida kalkulyator

Masalan, qo‘shish va ayirish uchun alohida funksiyalar yaratamiz.

#include <iostream>

using namespace std;

int qoshish(int a, int b) {
    return a + b;
}

int ayirish(int a, int b) {
    return a - b;
}

int main() {
    cout << qoshish(10, 5) << endl;
    cout << ayirish(10, 5);

    return 0;
}

Natija:

15
5

Funksiya ichida if

Funksiya ichida boshqa C++ kodlaridan foydalanish mumkin.

Masalan:

bool juftmi(int son) {
    if (son % 2 == 0) {
        return true;
    }

    return false;
}

Keyin:

cout << juftmi(10);

Natija:

1

Chunki 10 juft son.


Funksiya va cin

Funksiya ichida foydalanuvchidan ma'lumot olish ham mumkin.

Masalan:

void ismSorash() {
    string ism;

    cout << "Ismingiz: ";
    cin >> ism;

    cout << "Salom, " << ism;
}

Keyin:

ismSorash();

Funksiyalar dasturni tartibli qiladi

Katta dasturda hamma kodni main() ichiga yozish noqulay.

Masalan:

int main() {
    // 100 qator kod
    // yana 100 qator kod
    // yana kod...
}

Buning o‘rniga vazifalarni funksiyalarga bo‘lish mumkin:

void login() {
    // login kodi
}

void menyu() {
    // menyu kodi
}

void hisoblash() {
    // hisoblash kodi
}

Shunda dastur tushunarliroq bo‘ladi.


Amaliy mashqlar

1-mashq

salom() nomli funksiya yarating.

U:

Salom, dasturchi!

matnini chiqarsin.


2-mashq

Ikki sonni qabul qiladigan va ularning yig‘indisini qaytaradigan funksiya yarating.

Masalan:

qoshish(10, 20)

Natija:

30

3-mashq

Sonning kvadratini qaytaradigan funksiya yarating.

Masalan:

kvadrat(5)

Natija:

25

4-mashq

Son juft yoki toq ekanligini tekshiradigan funksiya yarating.

Masalan:

juftmi(10)

true qaytarsin.


5-mashq

Uchta son qabul qiladigan va eng katta sonni qaytaradigan funksiya yarating.


Muhim narsalarni eslab qoling

Funksiya — ma'lum bir vazifani bajaradigan kodlar to‘plami.

Funksiya:

void salom() {
    cout << "Salom!";
}

ko‘rinishida yaratilishi mumkin.

Funksiyani chaqirish:

salom();

Parametrlar orqali funksiyaga ma'lumot berish mumkin:

qoshish(10, 20);

return natijani qaytaradi.

void funksiya qiymat qaytarmaydi.

Funksiyalar katta dasturlarni kichik va tushunarli qismlarga bo‘lishga yordam beradi.