Covariance
- TypeScript kursu
- İleri seviye
- Ders 13/57
- 4 dk
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çerliDizilerde 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: covariantUygulama 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
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
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ü
class Animal {}
class Cat extends Animal {}
const makeCat: () => Cat = () => new Cat();
const makeAnimal: () => Animal = ____;
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ı |