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.
getqiymatni qaytaradi,setesa 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.