Funktsiya parametrlari tomonidan
Funktsiya parametrlarni qabul qilishi mumkin. Funktsiya nomidan keyin qavs ichida keltirilgan parametrlar quyidagi ta'rifga ega:
Masalan, ikkita raqamni qo'shadigan funktsiyani aniqlaymiz:
1
2
3
4
5
6
7
8
|
void main() {
sum(2, 5); // 7
}
void sum(int a, int b){
int c = a + b;
print(c);
}
|
Sum funksiyasi a va b nomli va int tipidagi ikkita parametrni oladi. Asosiy funksiyada biz sum funksiyasini chaqiramiz va unga ikkita argumentni uzatamiz. Argumentlar funksiya parametrlari uchun qiymatlardir. Argumentlar pozitsiya bo'yicha parametrlarga uzatiladi. Ya'ni, birinchi argument birinchi parametrga, ikkinchi argument ikkinchi parametrga o'tkaziladi va hokazo. Bunda a parametri uning qiymati sifatida 2 raqamini, b parametri esa 5 raqamini oladi.
O'tkazilgan argumentlar soni parametrlar soniga mos kelishi kerak. Bundan tashqari, argumentlar turlari va parametrlar turlari o'rtasida muvofiqlik bo'lishi kerak. Masalan, boshqa funktsiyani aniqlaymiz:
1
2
3
4
5
6
7
8
9
|
void main() {
showPerson("Tom", 35);
showPerson("Alice", 29);
}
void showPerson(String name, int age){
print("Name: $name");
print("Age: $age \n");
}
|
showPerson funksiyasi ikkita parametrni oladi. Birinchi parametr String turiga, ikkinchisi esa int tipiga ega. Shuning uchun funktsiyani chaqirishda avval String tipidagi qiymatni (ya'ni satr), so'ngra int tipidagi qiymatni (ya'ni butun son) o'tkazish kerak.
Funktsiyani belgilashda biz parametrlar turini ko'rsatishimiz shart emas. Keyin Dartning o'zi o'tgan qiymatlar asosida ularning turini aniqlaydi:
1
2
3
4
5
6
7
8
9
|
void main() {
showPerson("Tom", 35);
showPerson(29, "Alice");
}
void showPerson(name, age){
print("Name: $name");
print("Age: $age \n");
}
|
E'tibor bering, endi funktsiyani belgilashda parametr nomi va yoshi qaysi turni ifodalashi noma'lum. Shuning uchun, showPerson ga ikkinchi qo'ng'iroqda (29, "Alice") Dart name parametrini int parametri sifatida ko'rib chiqadi, chunki unga butun son uzatiladi. Va yosh parametri qator sifatida ko'rib chiqiladi.
Ixtiyoriy parametrlar
Biz bir qator parametrlarni ixtiyoriy qilishimiz mumkin, ya'ni ular uchun hech qanday qiymatni o'tkaza olmaymiz. Buning uchun parametr kvadrat qavs ichiga olinadi. Lekin bunda u parametrga hech qanday qiymat o'tkazilmasa ishlatiladigan standart qiymatni taqdim etishi kerak:
1
2
3
4
5
6
7
8
9
|
void main() {
showPerson("Tom", 35);
showPerson("Alice");
}
void showPerson(String name, [int age = 22]){
print("Name: $name");
print("Age: $age \n");
}
|
Bunday holda, yosh parametri ixtiyoriydir. Agar biz unga hech qanday qiymat bermasak, u sukut bo'yicha 22 ga o'tadi. Konsol chiqishi:
Name: Tom
Age: 35
Name: Alice
Age: 22
Biroq, agar ixtiyoriy parametr null bo'ladigan turni ifodalasa, ya'ni u null qiymatini qabul qilishi mumkin bo'lsa, siz uning uchun standart qiymatni o'tkazib yuborishingiz mumkin - bu holda standart qiymat null bo'ladi:
1
2
3
4
5
6
7
8
9
10
11
|
void main() {
showPerson("Tom", 35);
showPerson("Alice");
}
void showPerson(String name, [int? age]){
print("Name: $name");
if(age!=null){
print("Age: $age \n");
}
}
|
Konsol chiqishi:
Name: Tom
Age: 35
Name: Alice
Nomlangan parametrlar
Dart parametrlarni nom bilan o'tkazishni qo'llab-quvvatlaydi. Masalan:
1
2
3
4
5
6
7
8
9
10
|
void main() {
showPerson(name: "Tom", age: 35);
showPerson(age: 29, name: "Alice");
showPerson(name: "Kate");
}
void showPerson({String name = "undefined", int age=0}){
print("Name: $name");
print("Age: $age \n");
}
|
Funktsiyani belgilashda parametrlar ro'yxati jingalak qavslar ichiga olinadi va agar uning turi nullni qo'llab-quvvatlamasa, har bir parametr uchun standart qiymat belgilanadi.
Funktsiya chaqirilganda parametr nomi ko'rsatiladi va uning qiymati ikki nuqta bilan ajratiladi (nom: "Tom"), biz parametrlarni istalgan tartibda belgilashimiz mumkin. Misol uchun, ikkinchi qo'ng'iroq birinchi navbatda yosh parametri uchun, keyin esa nom parametri uchun qiymatni belgilaydi (showPerson (yosh: 29, ism: "Alice")). Bundan tashqari, biz parametrlarga umuman qiymat o'tkaza olmaymiz, keyin bunday parametr uchinchi qo'ng'iroqdagi yosh parametrida bo'lgani kabi standart qiymatga ega bo'ladi (showPerson (ism: "Kate")).
Konsol chiqishi:
Name: Tom
Age: 35
Name: Alice
Age:29
Name: Kate
Age: 0
Agar parametr null bo'ladigan turni ifodalasa, ya'ni null qiymatni qo'llab-quvvatlasa, biz standart qiymatni o'tkazib yuborishimiz mumkin, keyin standart qiymat null bo'ladi:
1
2
3
4
5
6
7
8
9
10
11
12
|
void main() {
showPerson(age: 35);
showPerson(age: 29, name: "Alice");
showPerson(name: "Kate");
}
void showPerson({String? name = "undefined", int? age}){
print("Name: $name");
if(age != null){
print("Age: $age \n");
}
}
|
Dasturning konsol chiqishi:
Name: undefined
Age: 35
Name: Alice
Age: 29
Name: Kate
Funksiyalardagi konstantalar
Parametrlar qiymatlarni funktsiyalarda aniqlangan mahalliy o'zgaruvchilarga o'tkazish imkonini beradi. Ammo siz qiymatlarni parametrlar orqali mahalliy yakuniy konstantalarga o'tkazishingiz mumkin, chunki ular ish vaqtida aniqlanadi. Ammo shu bilan birga, biz qiymatlarni doimiy konstantalarga o'tkaza olmaymiz, chunki ularning qiymatlari kompilyatsiya vaqtida ma'lum bo'lishi kerak. Shu munosabat bilan, funktsiyaga turli xil qo'ng'iroqlar uchun biz oxirgi konstantalarga turli qiymatlarni o'tkazishimiz mumkin:
1
2
3
4
5
6
7
8
9
10
11
|
void main() {
showPerson("Tom", 35);
showPerson("Alice", 22);
}
void showPerson(String userName, int userAge){
// const int initialAge = userAge; - так нельзя, константа должна определяться на этапе компиляции
final String name = userName;
final int age = userAge;
print("Name: $name Age: $age \n");
}
|
Dasturning konsol chiqishi:
Name: Tom Age: 35
Name: Alice Age: 22
|