Menu
Coddy logo textTech

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şletmiyor

Bu 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.

challenge icon

Görev

Kolay

on 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 bir String model özelliğine sahip bir int speed sınıfı. Her iki değeri alan bir oluşturucu ekle. accelerate() yazdıran bir [model] accelerating to [speed] km/h yöntemi ekle.
    • TurboBoost anahtar sözcüğünü kullanarak Vehicle ile kısıtlanmış bir on mixin'i. Bu mixin, activateTurbo() yazdıran ve ardından [model] TURBO ACTIVATED! çağıran bir accelerate() yöntemine sahip olmalı (on Vehicle kısıtlaması sayesinde her ikisine de erişilebilir).
    • SportsCar sınıfını genişleten ve Vehicle mixin'ini kullanan bir TurboBoost sınıfı. Bir String 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.
  • 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 rengi 320 olan bir 'Red' oluştur.
    • showOff() çağrısını yap.
    • activateTurbo() çağrısını yap.

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/h

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
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Dart derleyicisi