Mixin'lerde on Anahtar Sözcüğü
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 53 / 110.
Bazen bir mixin'in, eklendiği sınıftaki yöntemleri veya özellikleri kullanması gerekir. on anahtar sözcüğü, bir mixin'i yalnızca belirli bir türü genişleten sınıflarla kullanılacak şekilde kısıtlamanı 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'); // 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'ı genişleten sınıflara uygulanabileceği anlamına gelir. Bu, mixin'in Animal'ın üyelerine erişebilmesini garanti eder. on olmadan mixin, name veya breathe()'in var olduğunu bilemezdi.
Uyumsuz bir sınıfta kısıtlı bir mixin kullanmayı denerseniz Dart size 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ıftaki belirli yeteneklere bağlı olduğunda kullanışlıdır. Daha güvenli bir sözleşme oluşturur; mixin belirli bir davranış sunmayı vaat eder, ancak bunu yalnızca doğru şekilde çalışması için ihtiyaç duyduğu temele sahip olduğunda yapar.
Görev
Kolayon anahtar sözcüğünün 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 artırma işlevi ekleyen bir mixin oluşturacaksın; ancak bu mixin yalnızca Vehicle temel sınıfını genişleten sınıflar tarafından kullanılabilecek.
Kodunu iki dosyada düzenleyeceksin:
vehicles.dart: Temel sınıfını, kısıtlanmış mixin'ini ve araç türlerini burada tanımla:- Bir
Vehicleözelliğine ve birString modelözelliğine sahip birint speedsınıfı. Her iki değeri alan bir oluşturucu ekle.accelerate()yazdıran bir[model] accelerating to [speed] km/hyöntemi ekle. TurboBoostanahtar sözcüğünü kullanarakVehicleile kısıtlanmış bironmixin'i. Bu mixin,activateTurbo()yazdıran ve ardından[model] TURBO ACTIVATED!çağıran biraccelerate()yöntemine sahip olmalı (on Vehiclekısıtlaması sayesinde her ikisine de erişilebilir).SportsCarsınıfını genişleten veVehiclemixin'ini kullanan birTurboBoostsınıfı. BirString colorözelliği ekle. Oluşturucu model, speed ve color değerlerini almalı.showOff()yazdıran bir[color] [model] ready to race!yöntemi ekle.
- Bir
main.dart: vehicles dosyanı içe aktar ve kısıtlanmış mixin'in nasıl çalıştığını göster:- Modeli
SportsCar, hızı'Ferrari've rengi320olan bir'Red'oluştur. showOff()çağrısını yap.activateTurbo()çağrısını yap.
- Modeli
TurboBoost mixin'i model'e erişebilir ve accelerate() çağrısı yapabilir; çünkü on Vehicle bildirimi, mixin'in yalnızca Vehicle sınıfını genişleten sınıflara dahil edilmesini garanti eder. Bu, mixin'in hangi yeteneklerin kullanılabilir 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/hKendin 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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi