CodeBlanks Logo Icon CodeBlanks

Çoklu mixin

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

main.dart
// 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

main.dart
// 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

Soru
class Duck with Flyer____ Swimmer {
  Duck();
}
Cevap
class Duck with Flyer, Swimmer {
  Duck();
}

Açıklama: Virgül mixin listesini ayırır.

Orta seviye bölümündeki tüm dersler