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

Sinf shaxsiy maydoni va funksiyalari obyekt holatini tashqi koddan yashirish imkonini beradi va murojaat qilib bo’lmaydi. Biroq, ko’pincha bu shaxsiy maydonlarga murojaat etish kerak bo’ladi. Qabul qiluvchi va o’rnatuvchilar shaxsiy maydonlarga boshqariluvchi murojaat etishni ta’minlab, ularning maxfiyligini saqlaydi.

Masalan, quyidagi Student sinfini ko’raylik,

class Student {
String _first_name, _last_name;
int _year;
Student(this._first_name, this._last_name, this._year);
}

Bu yerda maxfiy va shaxsiy maydonlar _first_name, _last_name, _year lar bo’lmoqda va ularga bo’sh yoki mos kelmagan salbiy qiymatlardan qochish imkonini beradi. Endi ularga mos qiymatlarni berishda va olish imkoni bo’lsa yaxshi bo’ladi. Buning uchun qabul qiluvchi va o’rnatuvchilar yordam beradi.

Get (qabul qiluvchi)

Qabul qiluvchilar qiymat qaytarish uchun mo’ljallangan hamda ular get kalit so’zi foydalanish orqali quyidagicha yaratiladi:

tur get qabul_qiluvchi_nomi {return _maydon_nomi;}

Agar ifoda bir qator bo’lsa, qisqaroq shaklda bu ko’rinishda yoza olamiz:

tur get qabul_qiluvchi_nomi => _maydon_nomi;

Bunda qiymat qaytaradigan maxsus usulni ifodalaydi va Student sinfi bu shaklda bo’ladi:

class Student {
String _first_name, _last_name;
int _year;

String get first_name {return _first_name;}
String get last_name {return _last_name;}
int get year {return _year;}

Student(this._first_name, this._last_name, this._year);
}

Bu kodda 3 ta qabul qiluvchi mavjud:

String get first_name {return _first_name;}

String get last_name {return _last_name;}

int get year {return _year;}

Bunda asosan qabul qiluvchi maydon nomi bilan bir xil bo’ladi, lekin ixtiyoriy yozilishi mumkin. Unda parametrlar umuman bo’lmaydi.

Yuqoridagi Student sinfini boshqa faylda chaqirib ishlatadigan bo’lsak,

import 'student.dart';

void main() {
Student Khusanboy = Student('Khusanboy', 'Sobirjonov', 2003);
print(Khusanboy.first_name);
print(Khusanboy.last_name);
print(Khusanboy.year);
}
>> Khusanboy >> Sobirjonov >> 2003

Qabul qiluvchi xususiyatlari orqali obyektning ruxsat berilgan maxfiy maydon qiymatlarini olmoqdamiz.

Set (o’rnatuvchi)

O’rnatuvchilar maydon qiymatini o’rnatish imkonini beradi ya’ni yangi qiymat belgilash. O’rnatuvchilar set kalit so’zi orqali quyidagi tartibda yaratiladi:

set ornatuvchi_nomi(parametr) {
// O'rnatuvchi tanasi
}

Xuddi funksiya sintaksisiga o’xshash tarzda bo’lib, bitta maydon qiymati bir yoki undan parametrlar tekshirilishi yoki shular orqali hisoblash natijasida chiqqan qiymatni o’rnatish imkonini yaratadi.

Masalan, Student sinfi ichidagi _first_name maydoniga berilgan qiymatlar keyin o’zgartirilishi kerak bo’lsa, ushbu o’rnatuvchilardan foydalanamiz.

class Student {
String _first_name, _last_name;
int _year;

String get first_name {return _first_name;}
String get last_name {return _last_name;}
int get year {return _year;}

set set_first_name (String fname) {
_first_name = fname;
}

Student(this._first_name, this._last_name, this._year);
}

Bu yerda set_first_name nomli o’rnatuvchida fname nomli parametr bo’lib, unga berilgan qiymat _first_name maydoniga o’rnatiladi va o’zgaradi. Bu sinfni boshqa kod faylida turib ishga tushiramiz:

import 'student.dart';

void main() {
Student Khusanboy = Student('Khusanboy', 'Sobirjonov', 2003);
Khusanboy.f_name = 'Xusanboy';
print(Khusanboy.first_name);
}
>> Xusanboy

O’rnatuvchi orqali obyekt _first_name maydoni qiymati yangisiga o’zgardi. Agarda turli shartlar tekshirilganda bularga mos tushgandagina qiymat o’zgarar edi, ammo hozir unday emas.

Sinf maydonlari orqali ichki maxfiy hisoblash ishlarini amalga oshirib faqatgina uning natijasini olish imkoniyatini qo’llay olamiz.