Mixin'lerde on Anahtar Kelimesi
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 53 / 110.
Bazen bir mixin'in, içine dahil edildiği sınıftaki metotları veya özellikleri kullanması gerekir. on anahtar kelimesi, bir mixin'i yalnızca belirli bir türü genişleten sınıflarla kullanılacak şekilde kısıtlamanıza olanak tanır.
class Animal {
String name;
Animal(this.name);
void breathe() => print('$name is breathing');
}
mixin Swimming on Animal {
void swim() {
print('$name is swimming'); // Animal'dan 'name' özelliğine erişebilir
breathe(); // Animal'ın metotlarını çağırabilir
}
}
class Fish extends Animal with Swimming {
Fish(String name) : super(name);
}on Animal bildirimi, bu mixin'in yalnızca Animal sınıfını genişleten sınıflara uygulanabileceği anlamına gelir. Bu, mixin'in Animal üyelerine erişimi olduğunu garanti eder. on olmadan, mixin name veya breathe() öğelerinin var olduğunu bilemezdi.
Kısıtlanmış bir mixin'i uyumsuz bir sınıfta kullanmaya çalışırsanız, Dart size bir derleme zamanı hatası verir:
class Robot with Swimming {} // Hata! Robot, Animal sınıfını genişletmiyorBu kısıtlama, mixin'inizin işlevselliği bir temel sınıftan gelen belirli yeteneklere bağlı olduğunda yararlıdır. Daha güvenli bir sözleşme oluşturur; mixin belirli bir davranışı vaat eder, ancak yalnızca doğru şekilde çalışması için gereken temele sahip olduğunda.
Görev
Kolayon anahtar kelimesinin, mixin'leri yalnızca belirli temel sınıflarla çalışacak şekilde nasıl kısıtladığını gösteren bir araç sistemi oluşturalım. Turbo boost özelliği ekleyen bir mixin oluşturacaksınız, ancak bu mixin yalnızca bir Vehicle temel sınıfını genişleten sınıflar tarafından kullanılabilecek.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
vehicles.dart: Temel sınıfınızı, kısıtlanmış mixin'inizi ve araç türlerinizi burada tanımlayın:- Bir
String modelözelliği ve birint speedözelliği olan birVehiclesınıfı. Her iki değeri de alan bir yapıcı (constructor) ekleyin.[model] accelerating to [speed] km/hyazdıran biraccelerate()metodu ekleyin. onanahtar kelimesini kullanarakVehiclesınıfı ile kısıtlanmış birTurboBoostmixin'i. Bu mixin,[model] TURBO ACTIVATED!yazdıran ve ardındanaccelerate()metodunu çağıran (her ikisi deon Vehiclekısıtlaması sayesinde erişilebilirdir) biractivateTurbo()metoduna sahip olmalıdır.Vehiclesınıfını genişleten veTurboBoostmixin'ini kullanan birSportsCarsınıfı. BirString colorözelliği ekleyin. Yapıcı; model, speed ve color değerlerini almalıdır.[color] [model] ready to race!yazdıran birshowOff()metodu ekleyin.
- Bir
main.dart: Araçlar dosyanızı içe aktarın ve kısıtlanmış mixin'in nasıl çalıştığını gösterin:- Modeli
'Ferrari', hızı320ve rengi'Red'olan birSportsCaroluşturun. showOff()metodunu çağırın.activateTurbo()metodunu çağırın.
- Modeli
TurboBoost mixin'i, model özelliğine erişebilir ve accelerate() metodunu çağırabilir; çünkü on Vehicle bildirimi, bu mixin'in yalnızca Vehicle sınıfını genişleten sınıflara dahil edileceğini garanti eder. Bu, mixin'in hangi yeteneklerin mevcut olduğunu tam olarak bildiği güvenli bir sözleşme oluşturur.
Beklenen çıktı:
Red Ferrari ready to race!
Ferrari TURBO ACTIVATED!
Ferrari accelerating to 320 km/hKopya kağıdı
on anahtar kelimesi, bir mixin'in yalnızca belirli bir türü genişleten sınıflarla kullanılmasını kısıtlar. Bu, mixin'in temel sınıftaki metotlara ve özelliklere güvenli bir şekilde erişmesini sağlar.
class Animal {
String name;
Animal(this.name);
void breathe() => print('$name is breathing');
}
mixin Swimming on Animal {
void swim() {
print('$name is swimming'); // Can access 'name' from Animal
breathe(); // Can call Animal's methods
}
}
class Fish extends Animal with Swimming {
Fish(String name) : super(name);
}on Animal bildirimi, mixin'in Animal üyelerine erişimi olduğunu garanti eder. Bu bildirim olmadan, mixin name veya breathe() üyelerinin varlığından haberdar olamazdı.
Kısıtlanmış bir mixin'i uyumsuz bir sınıfta kullanmaya çalışmak, derleme zamanı hatasına yol açar:
class Robot with Swimming {} // Error! Robot doesn't extend AnimalBu kısıtlama, mixin'inizin işlevselliği bir temel sınıfın belirli yeteneklerine bağlı olduğunda kullanışlıdır ve mixin ile onu kullanan sınıflar arasında daha güvenli bir sözleşme oluşturur.
Kendin dene
import 'vehicles.dart';
void main() {
// TODO: Modeli 'Ferrari', hızı 320 ve rengi 'Red' olan bir SportsCar oluşturun
// TODO: showOff() metodunu çağırın
// TODO: activateTurbo() metodunu çağırın
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı