Dart Mixins

Mixinlar Dart dasturlash tilining qiziq xususiyati bo’lib, uni avval boshqa dasturlash tillarida ko’rmagan bo’lishingiz mumkin. Dart dasturlash tilida mixin, sinflarni boshqa sinflar bilan bog’lash uchun ishlatiladigan vosita hisoblanadi. Mixinlar OOP g'oyalarini amalga oshirish uchun mo'ljallangan. Mixinlar bilan obyekt tuzilishi va xususiyatlarini o'zgartirish, xususiyatlarni qo'shish yoki o'chirishni o'z ichiga oladi.

Ta'rifi bo'yicha mixin oddiy sinfga o'xshaydi, faqat mixin kalit so'zi yordamida aniqlanadi. Bundan tashqari, aralash konstruktorni o'z ichiga olmaydi va mixin boshqa mixinlardan foydalana olmaydi va boshqa sinflardan meros bo'la olmaydi.

Mixinlarni belgilashda sizda ikkita variant mavjud. Agar mixin oddiy sinf sifatida ham ishlatilishini istasak, u mixin class so'zlari yordamida aniqlanadi. Lekin agar biz sof mixin yaratmoqchi bo'lsak, ta'rif uchun oddiygina mixin ishlatiladi .

Mixinlardan foydalanish uchun with iborasidan foydalaning, shundan so'ng foydalanilgan sinflar ko'rsatiladi:

mixin class A {} // mixin sinf

mixin B {} // mixin

class C with A, B {} // mixindan foydalanish

Shunday qilib, mixinlar yordamida sinflarda qanday foydalanishni bir misol bilan ko’raylik:

mixin class Ishchi {
String kompaniya = "Amazon";
void ish() => print("$kompaniya da ishlaydi");
}

mixin Talaba {
String unversitet = "Garvard";
void talim() => print("$unversitet da o'qiydi");
}

class IshchiTalaba with Ishchi, Talaba {
String ism;
IshchiTalaba (this.ism, String OTM, String ish_joyi) {
unversitet = OTM;
kompaniya = ish_joyi;
}
}

void main() {
IshchiTalaba Azimjon = IshchiTalaba('Azimjon', "Stanford", "Google");
Azimjon.ish();
Azimjon.talim();
}
>> Google da ishlaydi >> Stanford da o'qiydi

Bu holda Ishchi va Talaba mixin vazifasini bajaradi. Bundan tashqari, Ishchi - bu mixin sinf va Talaba - bu sof mixin. Ushbu mixinlardan foydalanish uchun IshchiTalaba sinfini belgilashda with iborasidan foydalanasiz:

class IshchiTalaba with Ishchi, Talaba {

IshchiTalaba sinfi keyin Ishchi va Talaba mixinlari maydonlari va usullaridan foydalanishi mumkin.

Bundan tashqari, Ishchi mixin sinf bo'lganligi sababli, biz uni mustaqil ravishda ishlatishimiz mumkin - uning obyektlarini yaratish, maydonlarini o'zgartirish, usullarini chaqirish va hokazo, masalan:

mixin class Ishchi {
String kompaniya = "Amazon";
void ish() => print("$kompaniya da ishlaydi");
}

void main() {
Ishchi Khusanboy = Ishchi();
Khusanboy.ish();
Khusanboy.kompaniya = "Google";
Khusanboy.ish();
}
>> Amazon da ishlaydi >> Google da ishlaydi

E'tibor bering, Ishchi uchun biz ushbu turdagi obyektni yaratish uchun parametrsiz konstruktorni chaqirishimiz mumkin.

O'z navbatida, Talaba sof mixin vazifasini bajaradi, shuning uchun biz uni faqat mixin sifatida ishlatishimiz mumkin. Agar biz uning obyektini yaratishga harakat qilsak, quyidagi holatda bo'lgani kabi, biz xatoga duch kelamiz:

mixin Talaba {
String unversitet = "Garvard";
void talim() => print("$unversitet da o'qiydi");
}


void main() {
Talaba Khusanboy = Talaba();
Khusanboy.talim();
}
>> Error: Couldn't find constructor 'Talaba'.
Talaba Khusanboy = Talaba();

mixinlarni bekor qilish

Agar biz mixin larning natijaviy funksionalligidan qoniqmasak, ularni qayta belgilashimiz mumkin:

mixin class Ishchi {
String kompaniya = "Amazon";
void ish() => print("$kompaniya da ishlaydi");
}

mixin Talaba {
String unversitet = "Garvard";
void talim() => print("$unversitet da o'qiydi");
}

class IshchiTalaba with Ishchi, Talaba {
String ism;
IshchiTalaba (this.ism, String OTM, String ish_joyi) {
unversitet = OTM;
kompaniya = ish_joyi;
}

@override
void ish() => print("$ism $kompaniya da ishlaydi");
@override
void talim() => print("$ism $unversitet da o'qiydi");
}

void main() {
IshchiTalaba Azimjon = IshchiTalaba('Azimjon', "Stanford", "Google");
Azimjon.ish();
Azimjon.talim();
}
>> Azimjon Google da ishlaydi >> Azimjon Stanford da o'qiydi