Tür çıkarımı
- İngilizcesi
- Type Inference
- Türkçe karşılığı
- tip çıkarımı
- Okunuşu
- tayp infırıns
Günlük kullanımda iki ad da yaygın.
Kısaca
Tür çıkarımı, derleyicinin bir değişkenin ya da ifadenin türünü otomatik olarak belirlediği bir özelliktir; her tür bildirimini yazmanız gerekmez.
Tür çıkarımı (type inference) nedir?
Tür çıkarımı, derleyicinin ya da tür denetleyicisinin değerlerin nasıl oluşturulup kullanıldığına bakarak türleri sizin yerinize belirlemesi demektir. TypeScript'te let count = 5 yazarsanız, açık bir bildirim olmadan count değişkeninin bir number olduğunu bilir ve sonradan ona bir dize atarsanız hata bildirir. Kod hâlâ statik türlüdür; yalnızca elle daha az tür yazarsınız.
Derleyici türleri birkaç ipucundan çıkarır: bir değişkenin başladığı değer, bir fonksiyonun return deyimleri, generic bir fonksiyona aktarılan argümanlar ve map'e verilen bir callback gibi bir ifadenin içinde bulunduğu bağlam. TypeScript, Kotlin, Swift, Rust, Go ve Scala yerel değişkenlerin türlerini çıkarır, Java ve C# var sunar, C++'ta auto vardır ve Haskell ile OCaml gibi fonksiyonel diller neredeyse bir programın tamamının türlerini çıkarabilir.
Bu, tanımadığı bir sözcüğün anlamını çevresindeki cümleden çıkaran bir okuyucuya çok benzer. Çıkarım kodu kısa ve okunaklı tutar, ancak birçok ekip yine de fonksiyon parametrelerine, genel dönüş türlerine ve dışa aktarılan API'lere açık türler yazar; çünkü bu bildirimler niyeti belgeler ve daha net hata mesajları üretir.
Tür çıkarımı sıklıkla dinamik türlemeyle karıştırılır. JavaScript ya da Python gibi dinamik türlü bir dilde türler yalnızca program çalışırken denetlenir ve bir değişken şimdi bir sayı, sonra bir dize tutabilir. Çıkarımda ise türler sabittir ve program çalışmadan önce denetlenir; derleyici onları yalnızca sizin yerinize doldurur. Hiçbir ipucu bulamadığında, örneğin bildirimi olmayan bir fonksiyon parametresinde, TypeScript any türüne geri döner ve noImplicitAny seçeneği bunu hata olarak bildirir.
Önemli noktalar
- Tür çıkarımı, derleyicinin açık bildirim olmadan türleri belirlemesini sağlar.
- Çıkarımlı kod hâlâ statik türlüdür ve çalışmadan önce denetlenir.
- Türler ilk değerlerden, return deyimlerinden, generic argümanlardan ve bağlamdan çıkarılır.
- Açık tür bildirimleri fonksiyon parametrelerinde ve genel API'lerde yararlı olmaya devam eder.
- Çıkarım dinamik türleme değildir: çıkarılan bir tür sonradan değişemez.
Örnek
// No annotations, but every type is known at compile time
let count = 5; // inferred as number
const names = ["Ada", "Linus"]; // inferred as string[]
function double(x: number) {
return x * 2; // return type inferred as number
}
// name is inferred as string, lengths as number[]
const lengths = names.map((name) => name.length);
count = "five"; // Error: Type 'string' is not assignable to type 'number'.Sık sorulan sorular
Tür çıkarımı dinamik türlemeyle aynı şey midir?
Hayır. Dinamik türlemede türler program çalışırken denetlenir ve bir değişken tür değiştirebilir. Tür çıkarımında ise derleyici program çalışmadan önce sabit türleri belirler; bu yüzden tür hataları yine erken yakalanır.
Tür çıkarımına mı güvenmeliyim, yoksa türleri açıkça mı yazmalıyım?
Yaygın uygulama, yerel değişkenleri ve basit ifadeleri çıkarıma bırakmak; fonksiyon parametreleri, genel dönüş türleri ve dışa aktarılan API'ler için ise açık türler yazmaktır. Bu, kodu kısa tutarken önemli sınırları belgeler.
Python'da tür çıkarımı var mı?
Python'un kendisi dinamik türlüdür, ancak mypy gibi statik tür denetleyicileri kodunuzdan ve tür ipuçlarınızdan türleri çıkarır. Örneğin x = 5 sonrasında x'in bir int olduğunu bilirler.
İlgili sayfalar
- Veri türüProgramlamanın Temelleri, s. 54Veri türü, bir programa bir verinin sayı ya da metin gibi hangi tür bir değer taşıdığını ve hangi işlemlerin ona uygulanabileceğini söyleyen sınıflandırmadır.
- GenericsProgramlamanın Temelleri, s. 23Generics, 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.
- TypeScriptWeb Geliştirme, s. 51TypeScript, JavaScript üzerine statik tipler ekleyerek birçok hatayı kod çalışmadan yakalayan ve düz JavaScript'e derlenen bir programlama dilidir.
- DerleyiciProgramlamanın Temelleri, s. 12Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.
- DeğişkenProgramlamanın Temelleri, s. 10Değişken, bir programda sayı ya da metin gibi bir değeri tutan ve kodun çalışırken okuyup değiştirebildiği, adlandırılmış bir depolama alanıdır.
- Statik TiplemeProgramlamanın Temelleri, s. 52Statik tipleme, değişken ve ifadelerin türünün program çalışmadan önce, genellikle derleyici tarafından denetlenmesidir; birçok tür hatası erken yakalanır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin