Darsliklar Dart Late va kechiktirilgan ishga tushirish

Dart Dart Late va kechiktirilgan ishga tushirish

late va kechiktirilgan ishga tushirish — o’zgaruvchini e’lon qilib, uning qiymatini keyinroq berish imkonini beruvchi Dart xususiyati. late kalit so’zi Dart’ning null-xavfsizlik tizimida muhim rol o’ynaydi: u “bu o’zgaruvchi hozir bo’sh, ammo ishlatishdan oldin albatta qiymat oladi” degan va’dani bildiradi.

lateo’zgaruvchini keyinroq (kechiktirib) ishga tushirishga imkon beruvchi kalit so’z. U null bo’lmagan o’zgaruvchini e’londa qiymatsiz qoldirishga ruxsat beradi.

late — kechiktirilgan qiymat

Odatda null bo’lmagan o’zgaruvchiga e’londa qiymat berish shart. late bu qoidani yumshatadi — qiymatni keyin berish mumkin:

void main() {
  late String ism;
  ism = "Master Sherkulov";   // qiymat keyinroq berildi
  print(ism);
}
Master Sherkulov

late String ism — o’zgaruvchini qiymatsiz e’lon qildi, late esa “qiymat keyin keladi” deb va’da berdi. Diqqat: ism ni qiymat bermay ishlatsangiz, ish vaqtida xato yuzaga keladi.

Kechiktirilgan hisoblash (lazy)

late ning muhim foydasi — lazy initialization: qiymat faqat birinchi marta ishlatilganda hisoblanadi. Bu qimmat hisob-kitoblarni tejaydi:

int ogirHisob() {
  print("Hisob bajarilmoqda...");
  return 42;
}

void main() {
  late int natija = ogirHisob();
  print("Dastur boshlandi");
  print(natija);   // aynan shu yerda hisoblanadi
}
Dastur boshlandi
Hisob bajarilmoqda...
42

Diqqat: “Hisob bajarilmoqda…” e’loni emas, aynan natija birinchi ishlatilganda chiqdi. late qiymatni faqat kerak bo’lganda hisobladi. Agar natija umuman ishlatilmasa, ogirHisob chaqirilmasdi. Bu resurslarni tejaydi.

late qachon foydali?

late ning asosiy qo’llanish holatlarini jadvalda ko’ramiz:

Holat Foydasi
Keyin ishga tushiriladigan maydon null bo’lmagan turni saqlash
Qimmat hisob faqat kerakda hisoblanadi (lazy)
Sinf maydonlari konstruktordan keyin sozlash

Sinf maydonida late

late ayniqsa sinf maydonlarida foydali — maydon konstruktordan keyin, ammo ishlatishdan oldin sozlanadi:

class Server {
  late String manzil;

  void ulan() {
    manzil = "uzbekdevs.uz";
    print("Ulanish: $manzil");
  }
}

void main() {
  var s = Server();
  s.ulan();
}
Ulanish: uzbekdevs.uz

late String manzil — maydonni qiymatsiz e’lon qildi, ulan() metodi esa uni sozladi. Bu maydon qiymati konstruktorda emas, keyinroq ma’lum bo’lganda ishlatiladi.

Xulosa

Bu bo’limda late bilan kechiktirilgan ishga tushirishni, lazy initialization (faqat kerakda hisoblash) va sinf maydonlarida qo’llanishini ko’rib chiqdik. late — null-xavfsizlikni moslashuvchan qiladi. Keyingi darsda nullability — null-xavfsizlikka o’tamiz.