Özet - Generic'ler
- TypeScript kursu
- Orta seviye
- Ders 19/89
- 4 dk
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
// 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
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
class Tablo<K, V> {
private satirlar: [K, V][] = [];
ekle(k: K, v: V) {
this.satirlar.push([____]);
}
}
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 |