Darsliklar Dart Qabul qiluvchi (get) va o’rnatuvchi (set)

Dart Dart Qabul qiluvchi (get) va o’rnatuvchi (set)

Qabul qiluvchi (get) va o’rnatuvchi (set) — xususiy maydonga nazorat qilinadigan kirish beruvchi maxsus metodlar. get maydon qiymatini o’qishni, set esa uni tekshirib o’rnatishni ta’minlaydi. Ular inkapsulyatsiyani nafis va tabiiy qiladi — chunki maydonga oddiy o’zgaruvchi kabi murojaat qilinadi, ammo ortida nazorat turadi.

getter (get) va setter (set)xususiy maydonga kirishni boshqaradigan maxsus metodlar. get qiymatni qaytaradi, set esa uni tekshirib o’rnatadi.

get va set e’lon qilish

get va set xususiy maydon (_) uchun nazorat qilinadigan kirish beradi:

class Talaba {
  int _ball = 0;

  int get ball => _ball;              // getter

  set ball(int qiymat) {              // setter
    if (qiymat >= 0 && qiymat <= 100) {
      _ball = qiymat;
    }
  }
}

void main() {
  var t = Talaba();
  t.ball = 95;         // setter ishlaydi
  print(t.ball);       // getter ishlaydi
  t.ball = 150;        // rad etiladi
  print(t.ball);
}
95
150 rad etilgani uchun: 95

Diqqat: t.ball = 95 — oddiy maydonga o’xshaydi, ammo aslida set metodi ishladi va tekshiruv o’tkazdi. t.ball esa get ni chaqirdi. 150 tekshiruvdan o’tmadi, shuning uchun _ball 95 bo’lib qoldi.

Nega get/set qulay?

get/set ning kuchi shundaki, tashqaridan ular oddiy maydonga o’xshaydi, ammo ichida mantiq bor. Farqni jadvalda ko’ramiz:

Yondashuv Tashqaridan Nazorat
Ochiq maydon t.ball = 95 yo’q
Metod t.ballOrnat(95) bor, ammo noqulay
get/set t.ball = 95 bor va qulay

get/set metodning nazoratini va maydonning qulayligini birlashtiradi.

Faqat o’qiladigan xususiyat

Faqat get yozib, set ni tashlab ketsangiz, maydon faqat o’qiladigan bo’ladi:

class Doira {
  double radius;
  Doira(this.radius);

  double get yuza => 3.14159 * radius * radius;   // faqat get
}

void main() {
  var d = Doira(5);
  print("Yuza: ${d.yuza}");
}
Yuza: 78.53975

yuza — faqat get orqali hisoblanadigan xususiyat. Uni o’zgartirib bo’lmaydi (set yo’q), faqat o’qish mumkin. Bu hisoblanadigan qiymatlar uchun ideal — u har chaqirilganda radiusdan yuzani hisoblaydi.

Amaliy foydasi

get/set katta loyihalarda juda foydali: bugun oddiy maydon bo’lgan narsani ertaga tekshiruvli xususiyatga aylantirsangiz, tashqi kod o’zgarmaydi — chunki murojaat sintaksisi bir xil qoladi. Bu inkapsulyatsiyaning eng nafis ko’rinishidir.

Xulosa

Bu bo’limda get (qabul qiluvchi) va set (o’rnatuvchi) metodlarini, ularning qulayligini va faqat o’qiladigan hisoblangan xususiyatlarni ko’rib chiqdik. get/set — inkapsulyatsiyaning nafis vositasi. Keyingi darsda mixinlarga o’tamiz.