Mobil ilovalar ishlab chiqish


Kelajak sinfi bilan ishlash



Download 387,44 Kb.
bet33/34
Sana14.01.2022
Hajmi387,44 Kb.
#363624
1   ...   26   27   28   29   30   31   32   33   34
Bog'liq
Dart tili mustaqil ish

Kelajak sinfi bilan ishlash

Dart-da asinxron kod yozish uchun asosiy sinf Future sinfidir. Keling, u qanday imkoniyatlarni taqdim etishini ko'rib chiqaylik.


Kelajak konstruktorlari

Future obyektini yaratish uchun uning konstruktorlaridan birini ishlatishingiz mumkin:

Kelajak (FutureOr hisoblash ()): Hisoblash funksiyasini asinxron bajarish uchun Timer.run usulidan foydalanadigan kelajakni yaratadi va uning natijasini qaytaradi.
FutureOr turi hisoblash funktsiyasi Future yoki T tipidagi ob'ektni qaytarishi kerakligini bildiradi. Masalan, Future ob'ektini olish uchun hisoblash funktsiyasi Future ni qaytarishi kerak. ob'ekt yoki int ob'ekti
Future.delayed (Duration davomiyligi, [FutureOr computation ()]): Birinchi Duration parametri orqali belgilangan vaqt kechikishidan keyin boshlanadigan Future obyektini yaratadi. Ikkinchi ixtiyoriy parametr bu kechikishdan keyin ishlash funksiyasini bildiradi.

Future.error (Ob'ekt xatosi, [StackTrace stackTrace]): sodir bo'lgan xato haqida ma'lumotni o'z ichiga olgan Future ob'ektini yaratadi.


Future.microtask (FutureOr hisoblash ()): scheduleMicrotask funksiyasidan foydalanib, hisoblash funksiyasini asinxron tarzda ishga tushiradigan va uning natijasini qaytaradigan Future obyektini yaratadi.
Future.sync (FutureOr hisoblash ()): Darhol chaqiriladigan hisoblash funktsiyasi natijasini o'z ichiga olgan Future ob'ektini yaratadi.
Future.value ([FutureOr value]): Qiymat qiymatini o'z ichiga olgan Future obyektini yaratadi.
Ba'zi konstruktorlardan foydalanish. Birinchi konstruktor:

1

2

3



4

5

6



7

void main() {

  Future myFuture = Future(() {

        print("Hello Future");

  });


   

  print("Main ends");

}


Bu yerda Anonim funksiya Future konstruktoriga uzatiladi, u hech qanday parametrlarni qabul qilmaydi va hech narsani qaytarmaydi, faqat qandaydir xabarni aks ettiradi. Bu yerda anonim funksiya ishlatilsa-da, biz uni to‘liq funksiyaga aylantira olamiz. Konsol chiqishi:

Main ends

Hello Future

Nomlangan Future.delayed () konstruktoridan foydalanish shunga o'xshash, faqat ikkinchi parametrdan funktsiyani bajarishga o'tishdan oldin ma'lum vaqtni (birinchi parametr bilan ko'rsatilgan) kutadi:



1

2

3



4

void main() {

  Future future = Future.delayed(Duration(seconds: 3), () => print("Hello Future"));

  print("Main ends");

}


Future.value () konstruktoridan foydalanish, agar siz Future tarkibidagi qiymatni allaqachon bilsangiz, undan foydalanish mumkin. Ushbu konstruktor, xususan, keshlashdan foydalanadigan veb-xizmatlarni yaratishda foydali bo'lishi mumkin.

1

Future future = Future.value(35);

Bu holda Future 35 raqamini oladi (garchi u har qanday ob'ekt bo'lishi mumkin). Va keyin dasturda biz kelajakdan bu qiymatni olishimiz mumkin.
Xato ob'ekti va ixtiyoriy parametr, iz stekini oladigan Future.error () konstruktoridan foydalanish:

1

Future future = Future.error(ArgumentError.notNull("input"));

Bunday holda, ArgumentError.notNull ("kirish") ifodasi xato ob'ekti sifatida ishlatiladi, bu kiritish argumenti null bo'lmasligi kerakligini aytadi.
Qiymat olinmoqda

Haqiqatda, Future tipi umumiy tur yoki umumiy tur bo'lib, u ma'lum bir tur - Future tomonidan yoziladi. Burchakdagi qavsdagi T harfi Kelajak olib boradigan qiymat turini ko'rsatadi.


Yuqoridagi holatlardan birini olaylik:

1

2

3



4

5

6



7

void main() {

  Future future = Future(() {

        print("Hello Future");

  });


   

  print("Main ends");

}


Bu yerda konstruktorga uzatiladigan funksiya hech narsani qaytarmaydi, u faqat konsolga qandaydir xabarni chop etadi. Shuning uchun, haqiqatda, bu erda biz nafaqat Future ob'ektini, balki Future

1

2

3



Future future = Future(() {

    print("Hello Future");

});


Funktsiyani o'zgartiraylik - endi u satrni qaytarsin:

1

2

3



Future myFuture = Future(() {

    return "Hello Future";

});


Funktsiya satrni qaytargani uchun Future obyekti String ob'ektini o'z ichiga oladi va Future turini ifodalaydi.
Xuddi shu narsa boshqa konstruktorlar uchun ham amal qiladi:

1

2

3



4

5

6



7

8

9



10

11


void main() {

    Future future1 = Future(() {

        return 23.5;    // возвращает число double

    });


    Future future2 = Future.delayed(Duration(seconds: 3),

                        () => "Hello Future");       // возвращает строку

    Future future3 = Future.value(35);           // хранит число int

    Future future4 = Future.value("Hello Dart");  // хранит строку

   

  print("Main ends");



}

Qiymatni olish va kelajakni ishlatish

Yuqorida biz bir qator Future ob'ektlarini aniqladik. Ularni belgilashda ularning barchasi to'liq bo'lmagan holatda, ular faqat bajarilishi kerak. Ular allaqachon tugallangan va tugallangan holatga o'tgan paytni qanday tutish mumkin? Buning uchun Future-da aniqlangan usul mavjud. Bu usul Kelajak tugashi bilan ishga tushadigan qayta qo'ng'iroq funksiyasini qabul qiladi. Funktsiya Future dan olingan qiymatni yagona parametr sifatida qabul qiladi.


Quyidagi misolni ko'rib chiqing:

1

2

3



4

5

6



7

8

9



10

11

12



void main() {

    Future future = Future(() {

        print("Выполнение Future");

        return "Hello Future";  // возвращаем строку

    });

     


    future.then((value){

        print("Из Future получено значение: $value");

    });

   


  print("Main ends");

}


Bu yerda Future konstruktoriga berilgan funksiya satrni qaytaradi, shuning uchun kelajak Future turiga ega.
Keyin () usuli qiymat parametrini oladigan qayta qo'ng'iroq funktsiyasidan o'tadi - bu konstruktor bajarilganda qaytariladigan satr bo'ladi. Keyin funksiyaning o'zi ushbu natijaviy qiymatni konsolga chop etadi. Natijada biz quyidagi konsol chiqishini olamiz:

Main ends

Выполнение Future

Из Future получено значение: Hello Future

Xuddi shunday, biz boshqa turdagi qiymatlarni olishimiz mumkin - int, double va boshqalar.
Bo'shliq turi bilan nima qilish kerakligi haqida savol tug'ilishi mumkin - bu holda parametr o'rniga chiziqcha ko'rsatilgan:

1

2

3



4

5

6



7

8

9



10

11


void main() {

    Future future = Future.delayed(Duration(seconds: 3),

                        () => print("Hello Future"));        // возвращаемый тип - void

     


    future.then((_) {   // прочерк вместо параметра для типа void

        print("Выполнение Future завершено");

        }

    );


   

  print("Main ends");

}


Konsol chiqishi:

Main ends

Hello Future

Выполнение Future завершено

Agar kerak bo'lsa, biz ketma-ket bajariladigan usullarning zanjirlarini yaratishimiz mumkin:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



void main() {

 

    Future future = Future(() {



        print("Выполняется Future");

        return "Hello Future";  // возвращаем строку

    });

     


    future.then((value){

        print("Из Future получено значение: $value");

        return 22;

    })


    .then((value) => print("Выполнение Future завершено. Получено: $value") );

   


  print("Main ends");

}


Birinchi usuldan funktsiya Future - satrdan natijani oladi va uni konsolga chop etadi. Bundan tashqari, u yangi natijani qaytaradi - masalan, 22 raqami.
Ikkinchidan keyin usuli funksiyasida biz Future dan boshlang'ich qiymatni emas, aynan shu raqamni olamiz. Bundan tashqari, har bir keyingi keyingi usuldan funktsiya parametri oldingi so'ngra usuldagi funktsiyaning natijasidir.
Konsol chiqishi:

Main ends

Выполняется Future

Из Future получено значение: Hello Future

Выполнение Future завершено. Получено: 22

Qayta ishlashda xatolik

Future ko'rsatadigan operatsiyani bajarishda xatolik yuz berishi mumkin. Bunday holda, tugallangan holatga o'tgandan so'ng, Future ma'lum bir qiymat o'rniga xato haqidagi ma'lumotlarni saqlaydi. Xato haqida ma'lumot olish uchun siz catchError () usulidan foydalanishingiz mumkin, u o'sha paytdagi usulga o'xshash ishlaydi - u xato haqida ma'lumot uzatiladigan qayta qo'ng'iroq qilish funktsiyasini ham qabul qiladi:

1

2

3



4

5

6



7

8

9



10

11

12



13

14


void main() {

 

    Future future = Future(() {



        print("Выполняется Future");

        throw "Непредвиденная ошибка";

    });

     


    future.then((value){

        print("Из Future получено значение: $value");

    })

    .catchError((err) => print(err) );



   

  print("Ждем получения значения из Future");

}


Bunday holda, Future konstruktorida biz otish operatori yordamida xatoni yaratishga taqlid qilamiz ("Kutilmagan xato";). Bu yerda xato obyekti sifatida oddiy satr (“Kutilmagan xato”) ishlatiladi – bu catchError funksiyasiga err parametri orqali uzatiladi.
Natijada, bu holda, keyin usulidan funktsiya ishlamaydi, lekin catchError funksiyasi yonadi, chunki Futureni bajarishda xatolik yuz berdi. Konsol chiqishi:

Ждем получения значения из Future

Выполняется Future

Непредвиденная ошибка

Ikkinchi va ixtiyoriy parametr sifatida catchError usuli xato ob'ektining ma'lum bir shartga mos kelishini tekshiradigan funktsiyani qabul qiladi va agar xato ob'ekti ushbu shartga javob bersa, u holda true, aks holda false qaytariladi. Agar noto'g'ri qaytarilsa, ya'ni xato ob'ekti shartga mos kelmasa, birinchi parametrdagi funktsiya IJRO EMAS.
Keling, bir misolni ko'rib chiqaylik:

1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

17

18



void main() {

 

    Future(() {



        print("Выполняется Future");

        throw 404;

    })

    .then((value){



        print("Из Future получено значение: $value");

    })


    .catchError((err) {

        print("Код ошибки: $err");

    },

    test: (err) {

        return err is int;

  });


   

  print("Ждем получения значения из Future");

}


throw 404 ifodasi xato ob'ekti int bo'lgan 404 raqamini ifodalashini bildiradi.
catchError usulida ikkinchi parametr funksiya (err) {return err is int; } xato ob'ektini err parametri orqali oladi va xato ob'ekti int turida ekanligini tekshirish uchun err is int ifodasidan foydalanadi. Agar shunday bo'lsa, u holda rost qaytariladi va (err) {print ("Xato kodi: $ err");} funksiyasi bajariladi.
Va bu holda, biz quyidagi konsol chiqishini olamiz:

Ждем получения значения из Future

Выполняется Future

Код ошибки: 404

Ammo, agar biz xato yaratishni quyidagicha yozsak:

1

throw "404";

Keyin endi raqam emas, satr uzatiladi, mos ravishda return err is int ifodasi bunday xatolik noto'g'ri qaytariladi va unga ishlov berilmaydi.
WhenComplete usuli

Boshqa usul, whenComplete, Kelajak tugagach, ba'zi funksiyalarni bajaradi. Bu funktsiya Future-da xatolik yuzaga keladimi yoki yo'qligidan qat'iy nazar bajariladi - o'sha paytdagi barcha funktsiyalardan keyin va catchError. Masalan:



1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



16

void main() {

 

    Future(() {



        print("Выполняется Future");

        return "Hello Dart";

    })

    .then((value){



        print("Из Future получено значение: $value");

    })


    .catchError((err) {

        print("Ошибка: $err");

    })

    .whenComplete(() { print("Future завершил свою работу"); });



   

  print("Ждем получения значения из Future");

}


Konsol chiqishi:

Ждем получения значения из Future

Выполняется Future

Из Future получено значение: Hello Dart

Future завершил свою работу


Download 387,44 Kb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   34




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish