Darsliklar Dart Asinxronizatsiyaga kirish va Future

Dart Dart Asinxronizatsiyaga kirish va Future

Asinxronizatsiyaga kirish va Future — zamonaviy dasturlashning muhim tushunchasi. Ba’zi amallar vaqt talab qiladi: serverdan ma’lumot olish, fayl o’qish, ma’lumotlar bazasiga so’rov. Agar dastur ular tugashini kutib turaversa, foydalanuvchi qotib qolgan ilovani ko’radi. Asinxron dasturlash bu muammoni hal qiladi.

Future — kelajakda tayyor bo’ladigan qiymatni ifodalaydigan obyekt. U “hozir emas, biroz keyin natija keladi” degan va’dani bildiradi.

Muammo: kutish

Tasavvur qiling, serverdan ma’lumot olish 3 soniya vaqt oladi. Sinxron dasturda butun ilova shu 3 soniya qotib qoladi. Asinxron dasturda esa dastur boshqa ishlarni davom ettiraveradi va ma’lumot tayyor bo’lganda uni oladi. Aynan shu farq zamonaviy ilovalarni “jonli” qiladi.

Future — kelajakdagi qiymat

Future — hali tayyor bo’lmagan, kelajakda keladigan qiymat. Future.delayed bilan kechikishni namoyish qilamiz:

void main() {
  print("Boshlandi");
  Future.delayed(Duration(seconds: 2), () {
    print("2 soniyadan keyin");
  });
  print("Tugadi");
}
Boshlandi
Tugadi
2 soniyadan keyin

Diqqat tartibga: “Tugadi” “2 soniyadan keyin” dan oldin chiqdi. Dastur Future ni kutib turmadi — u boshqa kodni davom ettirdi, Future esa 2 soniyadan keyin bajarildi. Bu asinxronlikning mohiyati.

then — natijani olish

Future tayyor bo’lganda natijani then orqali olamiz:

Future<String> malumotOl() {
  return Future.delayed(Duration(seconds: 1), () => "UzbekDevs ma'lumoti");
}

void main() {
  print("So'rov yuborildi");
  malumotOl().then((natija) {
    print("Keldi: $natija");
  });
  print("Kutilmoqda...");
}
So'rov yuborildi
Kutilmoqda...
Keldi: UzbekDevs ma'lumoti

then — Future tayyor bo’lganda ishlaydigan funksiya. Ma’lumot 1 soniyadan keyin keldi, dastur esa shu vaqt ichida boshqa kodni bajardi.

Future holatlari

Future uch holatda bo’lishi mumkin. Ularni jadvalda ko’ramiz:

Holat Ma’nosi
Tugallanmagan natija hali tayyor emas
Tugallangan (qiymat) muvaffaqiyatli, qiymat bor
Tugallangan (xato) xato bilan yakunlandi

Xatoni ushlash uchun catchError ishlatiladi — bu keyingi darsda batafsil.

Xulosa

Bu bo’limda asinxronlik tushunchasini, Future — kelajakdagi qiymatni, then bilan natijani olishni va Future holatlarini ko’rib chiqdik. Asinxronlik ilovalarni “jonli” qiladi. Keyingi darsda Future sinfi bilan chuqurroq ishlashga o’tamiz.