CodeBlanks Logo Icon CodeBlanks

Generic sınıflar

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());  // merhaba

Tü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

index.ts
// 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

index.ts
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

Soru
class Kutu<T> {
  private deger: T;
  constructor(deger: T) { this.deger = deger; }
  al(): T { return this.deger; }
}
const k = new Kutu<____>(42);
Cevap
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

Orta seviye bölümündeki tüm dersler