Neden hemen hemen tüm modern programlama dillerinde (Go, Rust, Kotlin, Swift, Scala, Nim, hatta en son Python) tipleri değişken bildiriminden sonra gelir, önceden değil?
Senin öncül iki cephesinde kusurlu:
- Tanımlayıcıdan önce türüne sahip yeni-ish programlama dilleri vardır . C♯, D veya Ceylon, örneğin.
- Tanımlayıcıdan sonra türün olması yeni bir fenomen değildir, en azından Pascal'a (1968–1969'da tasarlandı, 1970'te yayınlandı) geri döndü, ama aslında ~ 1902'yi başlatan matematiksel tip teorisinde kullanıldı. Ayrıca ML (1973), CLU (1974), Hope (1970'ler), Modula-2 (1977–1985), Ada (1980), Miranda (1985), Caml (1985), Eiffel (1985), Oberon'da kullanıldı. (1986), Modula-3 (1986-1988) ve Haskell (1989).
Pascal, ML, CLU, Modula-2 ve Miranda'nın hepsi çok etkili dillerdi, bu yüzden bu tip beyanların stilinin popüler kalması şaşırtıcı değil.
Neden x: int = 42
ve değil int x = 42
? İkincisi eskisinden daha okunaklı değil mi?
Okunabilirlik bir aşinalık meselesidir. Şahsen, Çince’yi okunamayan buluyorum ama görünüşe göre, Çinliler yok. Pascal’ı okulda öğrenmiş, Eiffel, F♯, Haskell ve Scala’ya bakmış ve TypeScript, Fortress, Go, Rust, Kotlin, İdris, Frege, Agda, ML, Ocaml…… .
Bu sadece bir trend mi yoksa böyle bir çözümün arkasındaki gerçekten anlamlı sebepler var mı?
Eğer bir trendse, oldukça ısrarcıdır: Bahsettiğim gibi, matematikte yüz yıl öncesine dayanır.
Tanımlayıcıdan sonra yazı tipine sahip olmanın en önemli avantajlarından biri, çıkarımın istenmesi durumunda yazıyı bırakmanın kolay olmasıdır. Eğer beyanlarınız şöyle görünüyorsa:
val i: Int = 10
O zaman türünü dışarıda bırakmak ve bunun gibi çıkarımı yapmak çok önemlidir:
val i = 10
Bununla birlikte, tür şöyle tanımlayıcıdan önce gelirse:
Int i = 10
Ardından, çözümleyicinin bir ifadeyi bildirimden ayırması zorlaşmaya başlar:
i = 10
Dil tasarımcılarının genellikle ortaya çıkardığı çözüm, tür yerine yazılması gereken bir "tür yazmak istemiyorum" anahtar sözcüğünü tanıtmaktır:
var i = 10; // C♯
auto i = 10; // C++
Fakat bu aslında pek bir anlam ifade etmiyor: temel olarak açıkça bir tür yazmadığınızı söyleyen bir tür yazmanız gerekiyor. Ha? Sadece dışarıda bırakmak çok daha kolay ve daha mantıklı olurdu, ama bu gramerin daha karmaşık olmasını sağlıyor.
(Ve C'deki fonksiyon işaretçi tipleri hakkında konuşmayalım .)
Yukarıda belirtilen dillerin birçoğunun tasarımcıları bu konuda tartıştılar:
Not: Ceylon tasarımcıları ayrıca neden önek tipi sözdizimi kullandıklarını da belgelemiştir :
Postfix tipi açıklama yerine önek
Niçin C ve Java'yı, önce açıklama adından sonra Pascal ve ML yerine tür ek açıklamalarını koymakta?
Çünkü bunu düşünüyoruz:
shared Float e = ....
shared Float log(Float b, Float x) { ... }
Okumak bundan daha kolay:
shared value e: Float = ....
shared function log(b: Float, x: Float): Float { ... }
Ve biz sadece bir insanın başka türlü nasıl düşünebileceğini anlamıyoruz!
Şahsen ben onların "argümanını" diğerlerinden daha ikna edici buluyorum.