CodeBlanks Logo Icon CodeBlanks

Generic fonksiyonlar

Generic fonksiyon tanımlamayı öğrenirsin.

Generic fonksiyon tanımı

Generic fonksiyon, adından hemen sonra <T> ile tür parametresi alır. Bu parametre fonksiyon imzasının her yerinde kullanılabilir: parametre türü, dönüş türü veya gövde içinde. Tür parametresi, fonksiyonu her tür için yeniden kullanılabilir kılar.

function sarma<T>(x: T): T[] {
  return [x];
}
const n = sarma(5);         // number[]
const m = sarma("merhaba"); // string[]

Açık vs çıkarımlı tür

Tür parametresinin açıkça yazılması zorunlu değildir; TypeScript argümandan çıkarım yapar. Yine de okunabilirlik için veya çıkarımın yetersiz kaldığı durumlarda sarma<number>(5) biçiminde açık tür argümanı verilebilir. İki yazım da aynı sonucu üretir.

Uygulama İki değeri birleştir

birlestir<T> generic fonksiyonunu yaz: iki parametre a: T ve b: T, dönüş türü T[]. İki değeri bir dizi olarak döndürsün. Sonra birlestir(3, 5) çağrısının sonucunu console.log ile yazdır.

Başlangıç kodu

index.ts
// birlestir<T>(a: T, b: T): T[] fonksiyonunu yaz
// [a, b] dizisini döndür
// birlestir(3, 5) sonucunu console.log ile yazdır

Örnek çözüm

index.ts
function birlestir<T>(a: T, b: T): T[] {
  return [a, b];
}
console.log(birlestir(3, 5));

Beklenen çıktı

[ 3, 5 ]

Soru ve cevaplar

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

1 Aşağıdaki çağrıda tür argümanı açıkça verilmemiş. Ne olur?

index.ts
function sarma<T>(x: T): T[] { return [x]; }
const n = sarma(5);
  • Derleme hatası verir
  • T any olur
  • T string olur
  • TypeScript T'yi number olarak çıkarır Doğru cevap

Açıklama: TypeScript, argüman olan 5'in number olmasından T'yi çıkarır. Bu yüzden açık tür argümanı yazmak zorunlu değildir.

2 Açık tür argümanı

Soru
function kimlik<T>(x: T): T { return x; }
const n = kimlik<____>(42);
Cevap
function kimlik<T>(x: T): T { return x; }
const n = kimlik<number>(42);

Açıklama: 42 bir number olduğundan tür argümanı da number olmalıdır. string veya boolean derleme hatası verir; T ise çağrı yerinde tanımsızdır.

3 Generic fonksiyon parçaları

Kavram Anlamı
function ad<T> Generic fonksiyon başlığı
<T> Tür parametresi bildirimi
kimlik<number>(42) Açık tür argümanı
kimlik(42) Çıkarımlı tür argümanı

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