Funksiya qiymat qaytarish turiga qarab ikkiga bo’linadi : qiymat qaytaradigan va qaytarmaydigan funksiyalar.
Qiymat qaytaradigan funksiya bu kabi funksiyada return kalit so’zidan foydalangan holda biror natija qaytariladi va funksiya void turida bo’lmaydi. Qaytarilgan natija ekranga chiqarilishi yoki biror o’zgaruvchiga qiymat sifatida o’zlashtirib olib foydalanish imkoniyatiga ega.
Ikki sondan kattasini topib, natijasini qaytaruvchi funksiyani ko’rib o’taylik.
void main() {
print(Max(2, 3));
}
int Max(int a, int b) {
var natija;
if (a < b) {
natija = b;
} else {
natija = a;
}
return natija;
}
Max nomli funksiya yaratilmoqda va unga 2 ta parametr berib ketilmoqda. Unda natija nomli o’zgaruvchi eng katta qiymatni o’zida saqlashi uchun yaratilmoqda. Keyin esa a va b qiymatlari shart operatori orqali solishtirilib, eng katta natija olingan holatda qaytarilmoqda. Funksiyadan qaytarilgan natijani esa ekranga chiqarish bajarilmoqda main funksiyasida.
Funksiyada qaytarish turini ko’rsatmasligimiz ham mumkin. Bunda return kalit so’zi bilan kelgan ifoda qiymatidan aniqlab olinadi.
void main() {
print(site().runtimeType);
}
site() {
return "uzbekdevs.uz";
}
Funksiyadan qaytayotgan qiymat “uzbekdevs.uz” satr bo’lgani uchun uning turini aniq ko’rsak ham String deb bermoqda. Ya’ni o’zi avtomatik aniqlanyabdi.
Yodda tuting!
return kalit so’zi ishlagan vaqtda funksiya ishlashi ham to’xtatiladi va funksiya o’z ish jarayonini yakunlaydi.
Qiymat qaytarmaydigan funksiya o’z nomidan kelib chiqadiki, ular qiymat qaytarmaydi va void turida ifodalanadi. Biz bunga oldingi Funksiya mavzumizda turli berilgan misollarni ko’rsata olamiz. void turida berilgan funksiyalar qaytish turi aslida null bo’lad.
void main() {
site();
}
void site() {
print("UzbekDevs");
return null;
}
Funksiyaning qisqa shakli
Arrow funksiyalar bu funksiyaning qisqacha yozish shakli bo’lib, funksiya bitta ifodadan iborat bo’lganda bu usul ishlatiladi va return kalit so’zini ishlatish kerak emas. Sintaksisi : tur funksiya_nomi(parametrlar) => ifoda;
Yuqorida ko’rib o’tgan misolimizni bu shaklini ko’radigan bo’lsak,
void main() {
print(Max(2, 3));
}
int Max(int a, int b) => a > b ? a : b;
Funksiyani ishlash jarayonida biz qaysidir holatda to’xtatishimiz kerak bo’lsa (void turidagi asosan), return; ifodasini qo’llaymiz.
Foydalanuvchi yoshini 18 yoshdan kichik emasligini tekshiruvchi dastur tuzaylik. 18 dan kichik bo’lsa, funksiya ishlamasin aks holda natija chiqarsin ekranga.
void main() {
Age(17);
Age(25);
}
void Age(int yosh) {
if (yosh < 18) {
return;
}
print("Siz yosh chekloviga to'g'ri kelasiz");
}
Ko’rib turganingizdek, faqatgina bitta natija chiqmoqda, ammo biz funksiyaga 2 marotaba murojaat qildik. Birinchi murojaatda yosh cheklovi uchun mos tushmay funksiya to’xtatildi. Ikkinchi murojaatda esa cheklov uchun mos tushdi yosh.
Ichki funksiyalar
Funksiyalar ichida boshqa funksiyalarni joylashtira olamiz.
void main() {
void site() {
print("UzbekDevs");
}
site();
site();
}
Funksiya ichida ishlatilgan o’zgaruvchi lokal hisoblanadi va biz unda funksiyadan tashqarida turib ishlata olmaymiz. Funksiya ichidagi funksiyani ishlatish uchun u avval e’lon qilingan va keyin unga murojaat etilishi kerak. Yuqoridagi kabi. Har bir ichki funksiyada yana ichki funksiya joylashishi mumkin.
void main() {
void xabar() {
void site() {
print("UzbekDevs");
}
site();
site();
}
xabar();
}
Anonim funksiyalar
Anonim funksiyalar odatiy funksiyalarga o’xshaydi, faqatgina ular nomlanmagan bo’ladi. Ular Function kalit so’zi orqali yaratiladi.
Ikki son yig’indisini topuvchi anonim funksiya yarataylik.
void main() {
Function sum = (int a, int b) => a + b;
print(sum(2, 3));
}
Hozir biz funksiya arrow funksiya uslubida yozdik, ammo to’liq holatda qanday ko’rinishda bo’ladi :
void main() {
Function sum = (int a, int b) {
return a + b;
};
print(sum(2, 3));
}