CodeBlanks Logo Icon CodeBlanks

Covariance

Covariance kuralını fonksiyonlarda öğrenirsin.

Covariance nedir?

Covariance, alt tür ilişkisinin aynı yönde korunduğu kuraldır. Eğer Dog, Animal'ın alt türüyse, () => Dog türü () => Animal türünün alt türü sayılır. Yani Dog döndüren bir fonksiyonu, Animal döndüren bir fonksiyon beklenen yere atayabilirsin.

class Animal { name = "animal"; }
class Dog extends Animal { bark() {} }

type AnimalMaker = () => Animal;
const makeDog: () => Dog = () => new Dog();
const maker: AnimalMaker = makeDog;  // geçerli

Dizilerde covariance

Diziler de covariant'tır: Dog[], Animal[]'in alt türü kabul edilir. Bu, her elemanın Animal arayüzünü karşılamasından kaynaklanır. Ancak bu esneklik bazı güvenli olmayan işlemlere de izin verir; örneğin Animal[] beklenen yere Dog[] verip sonra o diziye başka bir alt tür eklemek derleme hatası vermeyebilir.

const dogs: Dog[] = [new Dog(), new Dog()];
const animals: Animal[] = dogs;  // geçerli: covariant

Uygulama Covariant fonksiyon atamasını göster

Animal'dan türeyen Dog sınıfını tanımla. () => Dog türünde bir fonksiyonu () => Animal türündeki değişkene ata ve dönen nesnenin name özelliğini console.log ile yazdır.

Başlangıç kodu

index.ts
class Animal {
  name = "animal";
}

// Dog sınıfını Animal'dan türet

// köpek üreten fonksiyonu tanımla

// covariant atama yapıp sonucu yazdır

Örnek çözüm

index.ts
class Animal {
  name = "animal";
}

class Dog extends Animal {}

const makeDog: () => Dog = () => new Dog();
const makeAnimal: () => Animal = makeDog;

const a = makeAnimal();
console.log(a.name);

Beklenen çıktı

animal

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdaki atamalardan hangisi covariance nedeniyle geçerlidir?

  • const a: Dog = new Animal();
  • const a: () => Animal = () => new Dog(); Doğru cevap
  • const a: () => Dog = () => new Animal();
  • const a: Dog[] = [new Animal()];

Açıklama: Covariance dönüş türünde aynı yönde çalışır; Dog döndüren fonksiyon, Animal döndüren beklentiye atanır.

2 Covariant dönüş türü

Soru
class Animal {}
class Cat extends Animal {}

const makeCat: () => Cat = () => new Cat();
const makeAnimal: () => Animal = ____;
Cevap
class Animal {}
class Cat extends Animal {}

const makeCat: () => Cat = () => new Cat();
const makeAnimal: () => Animal = makeCat;

Açıklama: makeCat, Cat döndürür ve Cat bir Animal olduğundan covariant kuralıyla () => Animal beklentisine atanır.

3 Covariance parçaları

Kavram Anlamı
Dog alt tür, Animal üst tür alt tür ilişkisi
() => Dog Animal döndüren beklentiye atanır
Dog[] Animal[] alt türü sayılır
Dönüş türü Covariance alanı

İleri seviye bölümündeki tüm dersler