Generic sınıflar
- TypeScript kursu
- Orta seviye
- Ders 17/89
- 4 dk
Generic sınıflarla tür güvenli koleksiyon öğrenirsin.
Generic sınıf tanımı
Generic sınıf, sınıf adından sonra <T> ile tür parametresi alır. Bu parametre sınıfın tüm alanlarında ve metotlarında kullanılabilir. Her örnekte tür sabitlenir; böylece Kutu<string> yalnızca string tutar.
class Kutu<T> {
private icerik: T;
constructor(icerik: T) {
this.icerik = icerik;
}
al(): T { return this.icerik; }
}
const k = new Kutu<string>("merhaba");
console.log(k.al()); // merhabaTür güvenli koleksiyonlar
Generic sınıflar, tür güvenli koleksiyonlar yazmak için idealdir. Yığın, kuyruk, ağaç gibi yapılar tek bir generic sınıf olarak yazılıp her türle kullanılabilir. new Depo<number>() ile number depolayan bir örnek, new Depo<string>() ile string depolayan başka bir örnek oluşturulur.
Uygulama Tür güvenli depo
Depo<T> generic sınıfını yaz. Private ogeler: T[] alanı başlangıçta boş dizi olsun. ekle(o: T): void metodu ögeyi diziye eklesin; al(i: number): T metodu verilen indeksteki ögeyi döndürsün. Sonra Depo<string> örneği oluştur, "elma" ekle ve al(0) sonucunu yazdır.
Başlangıç kodu
// Depo<T> sınıfını yaz
// private ogeler: T[] = []
// ekle metodu öge eklesin, al metodu indeksle döndürsün
// Depo<string> oluştur, "elma" ekle, al(0) yazdırÖrnek çözüm
class Depo<T> {
private ogeler: T[] = [];
ekle(o: T): void {
this.ogeler.push(o);
}
al(i: number): T {
return this.ogeler[i];
}
}
const d = new Depo<string>();
d.ekle("elma");
console.log(d.al(0));Beklenen çıktı
elma
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Generic bir sınıfta tür parametresi nereye yazılır?
- Sınıf adından hemen sonra, açılı parantez içinde Doğru cevap
- Dosya başında type T bildirisiyle
- Constructor parametresi olarak
- Metot adından sonra
Açıklama: Generic sınıfta tür parametresi sınıf adının hemen sonrasına açılı parantez içinde yazılır.
2 Generic sınıf örneği
class Kutu<T> {
private deger: T;
constructor(deger: T) { this.deger = deger; }
al(): T { return this.deger; }
}
const k = new Kutu<____>(42);
class Kutu<T> {
private deger: T;
constructor(deger: T) { this.deger = deger; }
al(): T { return this.deger; }
}
const k = new Kutu<number>(42);
Açıklama: 42 number olduğundan tür argümanı number olmalıdır. string veya boolean derleme hatası verir; T ise örneklenme yerinde tanımsızdır.
3 Generic sınıf parçaları
| Kavram | Anlamı |
|---|---|
class Kutu<T> |
Generic sınıf bildirimi |
new Kutu<number>(5) |
Generic sınıf örneği |
private icerik: T |
Tür parametresi alan olarak |
al(): T |
Tür parametresi dönüş türü olarak |