Menu
Coddy logo textTech

Covariant Anahtar Kelimesi

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 61 / 110.

Bir alt sınıfta bir metodu geçersiz kıldığınızda, Dart normalde parametre türlerinin tam olarak eşleşmesini gerektirir. Ancak bazen bir alt sınıf metodunun üst sınıftakinden daha özel bir tür kabul etmesini istersiniz. covariant anahtar sözcüğü buna olanak tanır.

Bir Animal sınıfının başka bir Animal nesnesini kabul eden bir metoda sahip olduğu bir senaryoyu düşünün:

class Animal {
  void chase(Animal other) {
    print('Chasing an animal');
  }
}

class Dog extends Animal {
  @override
  void chase(covariant Dog other) {
    print('Dog chasing another dog');
  }
}

covariant olmadan Dart, Dog tipinin Animal ile aynı tip olmadığından şikayet ederdi. Parametreden önce covariant ekleyerek Dart'a şunu söylersiniz: "Bunun daha spesifik olduğunu biliyorum ve yalnızca doğru tipin geçirilmesini sağlayacağım."

Bu, alt sınıfların mantıksal olarak yalnızca kendi türleriyle çalışması gerektiğinde yararlıdır:

void main() {
  Dog dog1 = Dog();
  Dog dog2 = Dog();
  
  dog1.chase(dog2);  // Çalışır: Başka bir köpeği kovalayan köpek
}

Ancak dikkatli olun; covariant kullanmak, tür güvenliğini çalışma zamanına kaydırır. Metodu yanlış türdeki bir üst referans üzerinden çağırırsanız, derleme zamanı hatası yerine çalışma zamanı hatası alırsınız. Bunu, geçirilen türlerden emin olduğunuzda kullanın.

challenge icon

Görev

Kolay

Evcil hayvanların yalnızca kendi türleriyle oynayabilmesini sağlamak için covariant anahtar sözcüğünü kullanan bir evcil hayvan uyumluluk sistemi oluşturalım. Her türün yalnızca aynı türden bir evcil hayvanı kabul eden bir playWith yöntemine sahip olduğu bir evcil hayvan hiyerarşisi oluşturacaksın.

Kodunu iki dosyada düzenleyeceksin:

  • pets.dart: Evcil hayvan hiyerarşini burada tanımla:
    • Pet özelliğine ve bir oluşturucuya sahip bir String name sınıfı. playWith(Pet other) yazdıran bir [name] plays with [other.name] yöntemi ekle
    • Cat sınıfını genişleten ve yalnızca bir Pet kabul etmek için playWith anahtar sözcüğünü kullanarak covariant yöntemini geçersiz kılan bir Cat sınıfı. [name] and [other.name] chase yarn together yazdırmalı
    • Dog sınıfını genişleten ve yalnızca bir Pet kabul etmek için playWith anahtar sözcüğünü kullanarak covariant yöntemini geçersiz kılan bir Dog sınıfı. [name] and [other.name] fetch the ball together yazdırmalı
    • Rabbit sınıfını genişleten ve yalnızca bir Pet kabul etmek için playWith anahtar sözcüğünü kullanarak covariant yöntemini geçersiz kılan bir Rabbit sınıfı. [name] and [other.name] hop around together yazdırmalı
  • main.dart: Evcil hayvanları içeren dosyanı içe aktar ve her evcil hayvan türünün yalnızca kendi türüyle nasıl oynadığını göster:
    • Cat ve 'Whiskers' adlarında iki 'Mittens' nesnesi oluştur, ardından Whiskers'ın Mittens ile oynamasını sağla
    • Dog ve 'Buddy' adlarında iki 'Max' nesnesi oluştur, ardından Buddy'nin Max ile oynamasını sağla
    • Rabbit ve 'Flopsy' adlarında iki 'Cotton' nesnesi oluştur, ardından Flopsy'nin Cotton ile oynamasını sağla

covariant anahtar sözcüğü, her alt sınıfın parametre türünü Pet türünden kendi özel türüne daraltmasına olanak tanır ve aynı türden evcil hayvanlar arasındaki etkileşimlerin tür güvenli olmasını sağlar.

Beklenen çıktı:

Whiskers and Mittens chase yarn together
Buddy and Max fetch the ball together
Flopsy and Cotton hop around together

Kendin dene

import 'pets.dart';

void main() {
  // TODO: 'Whiskers' ve 'Mittens' adında iki Cat nesnesi oluşturun
  // Ardından Whiskers'ın Mittens ile oynamasını sağlayın
  
  
  // TODO: 'Buddy' ve 'Max' adında iki Dog nesnesi oluşturun
  // Ardından Buddy'nin Max ile oynamasını sağlayın
  
  
  // TODO: 'Flopsy' ve 'Cotton' adında iki Rabbit nesnesi oluşturun
  // Ardından Flopsy'nin Cotton ile oynamasını sağlayı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