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.

Futurekelajakda 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

thenFuture 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.