CodeBlanks Logo Icon CodeBlanks

Özet - Generic'ler

Generic'lerle tür güvenli bir depo sınıfı yazarsın.

Özet - Generic'ler

Generic'ler, türü parametreleştirerek tek kodla farklı türleri tür güvenli şekilde çalıştırmayı sağlar. Generic fonksiyonlar function ad<T>, generic sınıflar class Ad<T> biçiminde yazılır. Birden çok tür parametresi de mümkündür: <K, V>. Bu üç yapıyı birleştirerek tür güvenli depolar, eşleştiriciler ve koleksiyonlar yazabilirsin.

class Eslestirme<K, V> {
  private veri: [K, V][] = [];
  koy(k: K, v: V) { this.veri.push([k, v]); }
}

Uygulama Tür güvenli eşleştirici

Eslestirme<K, V> generic sınıfını yaz. Private veri: [K, V][] alanı boş dizi ile başlasın. koy(k: K, v: V): void metodu çifti diziye eklesin. al(k: K): V | undefined metodu eşleşen değeri döndürsün, yoksa undefined. Sonra Eslestirme<string, number> oluştur, "a"->1 ve "b"->2 ekle, al("a") ve al("b") sonuçlarını ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// Eslestirme<K, V> sınıfını yaz
// veri alanı [K, V][] türünde olsun
// koy metodu anahtar ve değer eklesin
// al metodu anahtara göre değer döndürsün
// Eslestirme<string, number> oluştur, "a"->1, "b"->2 ekle
// al("a") ve al("b") sonuçlarını ayrı satırlarda yazdır

Örnek çözüm

index.ts
class Eslestirme<K, V> {
  private veri: [K, V][] = [];
  koy(k: K, v: V): void {
    this.veri.push([k, v]);
  }
  al(k: K): V | undefined {
    for (let i = 0; i < this.veri.length; i++) {
      if (this.veri[i][0] === k) return this.veri[i][1];
    }
    return undefined;
  }
}
const e = new Eslestirme<string, number>();
e.koy("a", 1);
e.koy("b", 2);
console.log(e.al("a"));
console.log(e.al("b"));

Beklenen çıktı

1
2

Soru ve cevaplar

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

1 Generic'lerin sağladığı temel kazanç nedir?

  • Tür güvenliğiyle yeniden kullanılabilir kod Doğru cevap
  • Daha hızlı çalışma
  • Daha kısa değişken adları
  • Daha az bellek kullanımı

Açıklama: Generic'ler aynı kodun farklı türlerde tür güvenli şekilde çalışmasını sağlar. Ne çalışma hızı ne bellekle ilgisi vardır.

2 Çift tür parametreli depo

Soru
class Tablo<K, V> {
  private satirlar: [K, V][] = [];
  ekle(k: K, v: V) {
    this.satirlar.push([____]);
  }
}
Cevap
class Tablo<K, V> {
  private satirlar: [K, V][] = [];
  ekle(k: K, v: V) {
    this.satirlar.push([k, v]);
  }
}

Açıklama: Dizi [K, V] tuple'ı beklediğinden doğru sıra k, v olmalıdır. v, k yanlış sıra; K, V tür adı (değer değil); k ise tek değer.

3 Generic yapıları eşleştir

Kavram Anlamı
function ad<T>(...) Generic fonksiyon
class Ad<T> {...} Generic sınıf
<T, U> Çoklu tür parametresi
new Ad<number>() Tür argümanıyla örnekleme

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