Çoklu mixin
- Dart kursu
- Orta seviye
- Ders 27/116
- 5 dk
Birden çok mixin uygulama öğrenirsin.
Birden çok mixin
Bir sınıfa birden çok mixin virgülle ayrılarak uygulanabilir. Bu, Dart'ın davranışları birleştirme gücünü gösterir; tekli kalıtım sınırı aşılmış olur.
Örnek: class Duck with Flyer, Swimmer { ... }. Burada Duck sınıfı hem Flyer hem Swimmer mixin'ini uygular. Her iki mixin'in metotlarına da örnek üzerinden erişilebilir: Duck().fly() ve Duck().swim(). Mixin listesi soldan sağa okunur; soldaki önce uygulanır. Aynı isimde metot varsa, en sağdaki (en son uygulanan) kazanır.
Uygulama sırası
Mixin listesi soldan sağa uygulanır; sıra önemlidir. Aynı isimde metot varsa, en sağdaki mixin kazanır ve öncekini geçersiz kılar.
Örnek: class A with M1, M2. Burada önce M1 uygulanır, sonra M2. Eğer her ikisi de hello() metodu tanımlıysa, sınıf M2.hello()'yu çağırır; M1.hello() gizlenir. Bu davranış, davranış birleştirmede öncelik belirlemenin yoludur. Sırayı değiştirmek sonuçları değiştirir; bu yüzden mixin listesi tasarımı dikkat ister.
Uygulama Duck'a iki mixin uygula
Flyer ve Swimmer adında iki mixin tanımla. Flyer içinde void fly() { print('Uçuyor'); }, Swimmer içinde void swim() { print('Yüzüyor'); } metotlarını ekle. Duck adında bir sınıf yaz: class Duck with Flyer, Swimmer { Duck(); }. main içinde var d = Duck(); ile örnek oluştur ve d.fly() ile d.swim() çağrılarını yap.
Başlangıç kodu
// Flyer ve Swimmer mixin'lerini tanımla
// Duck sınıfını iki mixin ile uygula
void main() {
// Duck örneği oluştur ve fly() ile swim() çağır
}Örnek çözüm
// Flyer ve Swimmer mixin'lerini tanımla
mixin Flyer {
void fly() {
print('Uçuyor');
}
}
mixin Swimmer {
void swim() {
print('Yüzüyor');
}
}
class Duck with Flyer, Swimmer {
Duck();
}
void main() {
var d = Duck();
d.fly();
d.swim();
}Beklenen çıktı
Uçuyor Yüzüyor
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 class Duck with Flyer, Swimmer { } nasıl yazılır?
- class Duck with Flyer; Swimmer { }
- class Duck extends Flyer implements Swimmer { }
- class Duck with Flyer, Swimmer { } Doğru cevap
- class Duck with Flyer with Swimmer { }
Açıklama: Çoklu mixin virgülle ayrılır.
2 Çoklu mixin parçalarını eşle
| Kavram | Anlamı |
|---|---|
, |
Liste ayracı |
Flyer, Swimmer |
Mixin listesi |
Duck |
Sınıf adı |
3 İkinci mixin'i ekle
class Duck with Flyer____ Swimmer {
Duck();
}
class Duck with Flyer, Swimmer {
Duck();
}
Açıklama: Virgül mixin listesini ayırır.