Reja. Kross-platformali dasturlash tili haqida umumiy ma`lumot



Download 0,98 Mb.
bet25/39
Sana07.03.2022
Hajmi0,98 Mb.
#485533
1   ...   21   22   23   24   25   26   27   28   ...   39
Bog'liq
j7WNgrIuzYyWbItD7qqrNdYOmEd13B0L

DeferredLoadException

  • FormatException

  • IntegerDivisionByZeroException

  • IOException

  • FileSystemException

  • HttpException

  • ProcessException

  • SignalException

  • SocketException

  • StdinException

  • StdoutException

  • TlsException

  • WebSocketException

  • IsolateSpawnException

  • TimeoutException

  • DeferredLoadException

  • FormatException

  • IntegerDivisionByZeroException

  • IOException

  • FileSystemException

  • HttpException

  • ProcessException

  • SignalException

  • SocketException

  • StdinException

  • StdoutException

  • TlsException

  • WebSocketException

  • IsolateSpawnException

  • TimeoutException

    Biz ko'rib chiqmoqchi bo'lgan har bir istisno turi uchun biz blokda o'zimizni qo'shishimiz mumkin:




    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    void main (){
    try{
    int x = 9;
    int y = 0;
    int z = x ~/ y;
    print(z);
    }
    on IntegerDivisionByZeroException{
    print("Обработка исключения IntegerDivisionByZeroException");
    }
    on FormatException{
    print("Обработка исключения FormatException");
    }
    print("Завершение программы");
    }


    Throw bayonoti va o'z istisno turlarini yaratish

    Bayonotni tashlash


    Throw iborasi bizga istisnoni to'g'ri joyga tashlashga imkon beradi. Quyidagi kodni ko'rib chiqing:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    void main (){
    try{
    Person tom = Person("Tom", -45);
    print(tom.age);
    }
    on Exception catch(e){
    print(e);
    }
    print("Завершение программы");
    }
    class Person{
    String name;
    int age = 1;
    Person(this.name, age){
    if(age < 1 || age > 110) {
    throw Exception("Недопустимый возраст");
    }
    else{
    this.age = age;
    }
    }
    }

    Masalan, yangi foydalanuvchi - Person sinfining ob'ektini yaratishda biz konstruktorga yoshga qarab yaroqsiz (masalan, salbiy qiymat) o'tish holatlarining oldini olishni xohlaymiz. Bunday holda, biz throw iborasi yordamida istisno yaratishimiz mumkin:




    1

    throw Exception("Недопустимый возраст");

    Xabar Istisno konstruktoriga uzatiladi, uni istisno bilan ishlashda olish mumkin.


    Shunday qilib, try blokida quyidagi qatorni bajarayotganda, istisno qilinadi:




    1

    Person tom = Person("Tom", -45);

    Va on..catch blokida siz ushbu istisnoni hal qilishingiz mumkin:





    1
    2
    3

    on Exception catch(e){
    print(e);
    }

    Catch blokidagi e argumenti bilan biz xato xabarini olishimiz mumkin. Konsol chiqishi:

    Exception: Недопустимый возраст
    Завершение программы

    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 0,98 Mb.

    Do'stlaringiz bilan baham:
  • 1   ...   21   22   23   24   25   26   27   28   ...   39




    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