May 23, 2018

Selamün Aleyküm;

Dart gibi bazı diller hem statik hem de dinamik türlü veri türlerini destekliyorlar.

Statik Tür (Strongly Type):

int n = 7;
String s = 'Merhaba';
double d = 1.5;

Dinamik Tür:

var a = 7;
a = 'Artık String Oldu!';
a = 7.2;

const b = 'SABİT';

Peki hem statik hem de dinamik türleri destekliyorlarsa - bazı durumlar müstesna - niçin sadece dinamik türlü değişkenler vs. oluşturmayalım? Bizim yazılımımıza ne gibi yararları / zararları olabilir?

Mesela Map türünde veri döndüren bir metot var: json.decode(), bunu şu şekilde tanımlayabiliriz:

Map<String, Object> user = json.decode(json);

Lakin böyle uzatmak yerine direk olarak şöyle tanımlasak nasıl olur? :

var user = json.decode(json);

Bu soruyu sormamın asıl sebebi bazen kodlarımızda tanımladığımız değişkenler vs. verilerin türlerini bilmek için uğraşıyoruz: "Acaba bu String miydi yoksa Json sınıfı türünde mi değer döndürüyordu?" gibi. Ayrıca A türünden B türüne dönüşümler yapmak zorunda kalabiliyoruz. Bu gibi dillerde çok çok gerekli olmadığı durumlarda direk olarak dinamik tür tanımlayıp geçsek nasıl olur? :)

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 23, 2018

Dart'ın dinamik türleri de desteklediğini bilmiyordum; öğrenmiş oldum. Bildiğim, JavaScript'i statik türlü hale getirdiği ve yalnızca statik olduğuydu.

Dinamik mi statik mi konusuna gelince, her iki çeşidi hararetle destekleyen çok iyi programcılar ve bilimciler var. Dediğin gibi, neden statik türlerle boğuşup kendimizi sıkıntıya sokalım... Öyle düşününce, program geliştirme aşaması hızlanmış gibi geliyor çünkü yazıveriyoruz ve çalıştırıyoruz. Ancak, ben bunun yanıltıcı olduğunu düşünüyorum ve başıma da geliyor: Örneğin, Python'da "sıkıntısız" yazdığım program 10 dakika çalıştıktan sonra ekrana tek satır yazarken yaptığım yazım hatası nedeniyle hata veriyor. Nerede kaldı hızlı geliştirme? (Bu olay aynen başıma gelmişti.)

Geçen gün de yine Python'da, string anahtarlı ve string değerli bir dict'in içine yanlışlıkla bir int değer karışmış; yine çalışma zamanında dakikalar geçtikten sonra farkettim. :/

Bunları önlemenin bir yolu, örneğin pylint gibi, programı çalıştırmadan önce denetleyen programlar kullanmak. Yani, statik türlü bir dilin derleyicisinin işlerinden birisini yandan başka bir programa yaptırmak. E nerede kaldı dinamik tür? Bir yandan sıkıntısız yazıyoruz diyeceğiz ama bir yandan da denetleyeceğiz...

Anlaşıldığı gibi, ben statik dillere bağlı bir programcıyım. Hatta, dinamik türlü dilleri delilik olarak görüyorum. Buna rağmen, öyle dillerin başarıyla kullanılabildiklerini de görüyor ve nasıl olabildiğine hayret ediyorum. :)

Buna rağmen çalıştığım yerlerde Python, awk, sed, bash scripting, vs. gibi diller ve programlar kullandım. Herhalde küçük programlarda tamam ama büyük sistemlerde olamaz diye düşünüyorum ama o konuda da yanılıyorum çünkü Python gibi dillerle yazılmış olan büyük programlar da var. (Galiba.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]