# Generics (Jenerikler)

Adres: https://softwaredictionary.org/tr/terimler/generics
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
Türkçe karşılığı: jenerik türler, genel türler
Okunuşu: cıneriks

Kısaca: Generics, tam tür güvenliğini korurken birçok veri türüyle çalışan fonksiyonlar, sınıflar ve türler yazmanıza olanak tanıyan bir dil özelliğidir.

## Generics nedir?

Generics, tür denetiminden vazgeçmeden kodu bir kez yazıp farklı türlerle yeniden kullanmanızı sağlar. Bir sayı listesi için bir fonksiyon, bir dize listesi için başka bir fonksiyon yazmak yerine, çağıranın kullandığı türün yerine geçen ve genellikle `T` olarak adlandırılan bir tür parametresi içeren tek bir fonksiyon yazarsınız. TypeScript, Java, C#, Go, Rust, Swift ve Kotlin generics'i destekler; Python ise bunları tür ipuçları (type hints) aracılığıyla sunar.

Generic bir fonksiyonu çağırdığınızda ya da generic bir sınıf oluşturduğunuzda tür parametresi, `Box<string>` örneğindeki gibi açıkça ya da tür çıkarımıyla otomatik olarak somut bir türle doldurulur. Derleyici ardından her kullanımın tutarlı olduğunu denetler; böylece bir `Box<string>` yanlışlıkla bir sayı tutamaz. Türün belirli özelliklere sahip olmasını zorunlu kılmak için `T extends { id: number }` gibi kısıtlamalar da ekleyebilirsiniz.

İyi bir benzetme etiket tutacağı olan bir saklama kutusudur: her kutunun tasarımı aynıdır, ancak birine 'kitaplar' etiketi yapıştırdığınızda içine yalnızca kitaplar girer. Generics, `Array<T>`, `Map<K, V>` ve `Promise<T>` gibi yerleşik koleksiyonlardan tür belirtilmiş sonuçlar döndüren API istemcilerine ve veri depolarına dek günlük kodun her yerinde karşımıza çıkar.

Generics sıklıkla TypeScript'teki `any` ya da Java'daki `Object` ile karıştırılır. `any` kullanmak tür denetimini kapatır; generic ise tam türü takip eder, dolayısıyla dışarı aldığınız değer, içeri koyduğunuz değerle aynı türdedir. Diller generics'i çalışma zamanında farklı ele alır: Java ve TypeScript tür bilgisini derlemeden sonra siler, C# korur, Rust ise kullanılan her tür için özelleştirilmiş kod üretir.

## Önemli noktalar

- Generics, tek bir fonksiyonun, sınıfın ya da türün birçok türle güvenle çalışmasını sağlar.
- `T` gibi bir tür parametresi, çağıran ya da tür çıkarımı tarafından doldurulan bir yer tutucudur.
- Derleyici, denetimi kapatan `any`'nin aksine türleri yine de denetler.
- Kısıtlamalar hangi türlere izin verileceğini sınırlar; örneğin `T extends { id: number }`.
- `Array<T>`, `Map<K, V>` ve `Promise<T>` gibi yerleşik türler generic'tir.

## Örnek: TypeScript'te generic bir fonksiyon ve generic bir sınıf

```typescript
// One function that works with arrays of any type
function first<T>(items: T[]): T | undefined {
  return items[0];
}

const n = first([10, 20, 30]); // n: number | undefined
const s = first(["a", "b"]);   // s: string | undefined

// A generic class with a constraint: T must have a numeric id
class Repository<T extends { id: number }> {
  private items: T[] = [];
  add(item: T): void { this.items.push(item); }
  findById(id: number): T | undefined { return this.items.find((i) => i.id === id); }
}
```

## Sık sorulan sorular

**Generics'te T ne anlama gelir?**

`T`, tür anlamına gelen type sözcüğünün kısaltması olan, tür parametresi için geleneksel bir addır. Generic kod kullanıldığında `number` ya da `User` gibi gerçek bir türle değiştirilen bir yer tutucudur; diğer yaygın adlar anahtarlar ve değerler için `K` ve `V`'dir.

**TypeScript'te generics ile any arasındaki fark nedir?**

`any` tür denetimini kapatır, dolayısıyla TypeScript bir değerin hangi türde olduğunu unutur. Generic ise tam türü hatırlar; bir `string` verirseniz bir `string` geri alırsınız ve hatalar derleme zamanında yine yakalanır.

**JavaScript'te generics var mı?**

Hayır. JavaScript dinamik türlüdür; bu yüzden her fonksiyon zaten her türden değeri kabul eder, ancak derleme zamanı denetimleri yoktur. Generics TypeScript'ten gelir ve TypeScript JavaScript'e derlenirken kaldırılır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
