Ob'ekt sifatida ishlash
Dart tilidagi har qanday funksiya Funksiya turini ifodalaydi va aslida alohida obyekt sifatida harakat qilishi mumkin. Masalan, biz funktsiya ob'ektini belgilashimiz, uni dinamik ravishda qandaydir funksiyaga havola qilishimiz va uni chaqirishimiz mumkin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void main() {
Function func = hello;
func(); // Hello!
func = bye;
func(); // Goodbye!
}
void hello(){
print("Hello!");
}
void bye(){
print("Goodbye!");
}
|
Bunda Function - func tipidagi o'zgaruvchi aniqlanadi va unga salom funksiyasiga havola beriladi. Keyin func o'zgaruvchisini normal funksiya sifatida bajaramiz, aslida bu o'zgaruvchi tegishli bo'lgan funksiyani chaqiramiz. Bundan tashqari, biz o'zgaruvchiga tegishli funktsiyani dinamik ravishda o'zgartirishimiz mumkin.
Konsol chiqishi:
Hello!
Goodbye!
Funktsiyalar boshqa funktsiyalar uchun parametr sifatida harakat qilishi mumkin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void main() {
showMessage(hello);
showMessage(bye);
}
void showMessage(Function func){
func(); // вызываем переданную функцию
}
void hello(){
print("Hello!");
}
void bye(){
print("Goodbye!");
}
|
Bu yerda salom va xayr funksiyalari parametr sifatida showMessage funksiyasiga uzatiladi. ShowMessage-ning o'zida biz o'tgan funktsiyalarni chaqirishimiz mumkin.
Bundan tashqari, funktsiya qaytish qiymati sifatida harakat qilishi mumkin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
void main() {
Function message = getMessage(11);
message();
message = getMessage(15);
message();
}
Function getMessage(int hour){
if(hour < 12) return morning;
else return evening;
}
void morning(){
print("Good morning!");
}
void evening(){
print("Good evening!");
}
|
Bu holda getMessage funksiyasi uzatilgan raqamga qarab ertalab yoki kechki funksiyani qaytaradi.
Keyin, dasturda biz funktsiyani olishimiz va uni chaqirishimiz mumkin:
1
2
|
Function message = getMessage(11);
message();
|
|