Statik Tipleme
- İngilizcesi
- Static Typing
- Türkçe karşılığı
- statik tür sistemi
- Okunuşu
- stetik tayping
Kısaca
Statik 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.
Statik tipleme (static typing) nedir?
Java, C#, Go, Rust, Kotlin ya da TypeScript gibi statik tipli bir dilde derleyici, değerlerin türleriyle tutarlı kullanılıp kullanılmadığını kontrol eder. Sayı beklenen yere string vermek, var olmayan bir metodu çağırmak ya da null olabilecek bir değeri ele almayı unutmak, kod daha hiç çalışmadan hata olarak bildirilebilir.
Türlerin her zaman açıkça yazılması gerekmez. Tür çıkarımı (type inference) derleyicinin bunları kendisinin bulmasını sağlar; böylece let count = 0 bir etikete gerek kalmadan sayı olarak bilinir. Açık türler yine de fonksiyon imzalarında yaygındır; orada dokümantasyon işi de görür: okuyan kişi gövdeyi okumadan neyin girip neyin çıktığını görebilir.
Faydalar kod tabanı büyüdükçe artar. Editörler doğru otomatik tamamlama ve bir metodu kullanıldığı her yerde yeniden adlandırmak gibi güvenli otomatik refactoring sunabilir; uzaktaki bir çağıranı bozan bir değişiklik de hemen ortaya çıkar. Bedeli ise başta daha fazla tören ve türleri ifade etmek zor olduğunda zaman zaman tür denetleyicisiyle uğraşmaktır.
Sık yapılan bir yanlış, statik tiplemenin güçlü tipleme (strong typing) demek olduğunu düşünmektir. Bunlar ayrı fikirlerdir: statik ile dinamik, türlerin ne zaman kontrol edildiğiyle ilgilidir; güçlü ile zayıf ise değerlerin türler arasında ne kadar serbestçe dönüştürüldüğüyle. C statik ama oldukça zayıf tiplidir; Python ise dinamik ama güçlü tiplidir.
Önemli noktalar
- Türler program çalışmadan önce, genellikle derleme zamanında kontrol edilir.
- Java, C#, Go, Rust, Kotlin ve TypeScript statik tiplidir.
- Tür çıkarımı sayesinde birçok türün elle yazılması gerekmez.
- Güvenilir otomatik tamamlamayı, refactoring'i ve hataların erken yakalanmasını sağlar.
- Statik ile dinamik, türlerin ne kadar katı değil, ne zaman kontrol edildiğiyle ilgilidir.
Örnek
function totalPrice(price: number, quantity: number): number {
return price * quantity;
}
totalPrice(9.99, 3); // fine
totalPrice("9.99", 3);
// Error: Argument of type 'string' is not assignable to parameter of type 'number'.
// Reported by the compiler and the editor; the code never runs with the bug.
let count = 0; // inferred as number, no annotation needed
count = "zero"; // Error: Type 'string' is not assignable to type 'number'.Sık sorulan sorular
TypeScript statik tipli mi?
Evet. TypeScript JavaScript'e statik türler ekler ve bunları derleme zamanında kontrol eder. Türler JavaScript'e derlenirken kaldırılır; bu yüzden çalışma zamanında yoktur.
Statik tipleme bütün hataları önler mi?
Hayır. Yanlış türler ve eksik alanlar gibi bir hata sınıfını yakalar, ama yanlış mantığı yakalamaz. Kodun doğru şeyi yaptığını kontrol etmek için yine testler gerekir.
Kademeli tipleme (gradual typing) nedir?
Dinamik tipli bir dile isteğe bağlı türler eklemektir; böylece bir kod tabanı parça parça türlendirilebilir. JavaScript için TypeScript ve Python için mypy gibi araçlarla kontrol edilen tür ipuçları buna örnektir.
Sık karşılaştırılanlar
İlgili sayfalar
- Dinamik TiplemeProgramlamanın Temelleri, s. 13Dinamik tipleme, türlerin değişkenlere değil değerlere ait olması ve program çalışırken kontrol edilmesidir; bir değişken önce sayı, sonra string tutabilir.
- 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.
- Tür çıkarımıProgramlamanın Temelleri, s. 53Tü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.
- 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.
- 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.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin