Programlama dilleri bildiğimiz gibi yapı olarak Dinamik ve Statik olmak üzere 2ye ayrılır.
Dinamik diller bazı durumlarda pek çok artısı olan ve günümüzde yıldızı parlayan yapılardır. Python/IronPython, Ruby dinamik dillere örnek olacabileceği gibi, C#, VB'i de statik dillere örnek olarak gösterebiliriz.
Peki bir dili ne dinamik yapar?
Dinamik dil program kodları tam olarak derlenmeyip, sadece program çalışacağı zaman client tarafından yorumlanarak çalışır. Yani compile edilme olayı olmadan yorumlayıcısı vasıtasıyla direkt olarak çalışırlar. Bu da başta web siteleri olamak üzere pek çok projede artı olarak yorumlanabilir.
En önemli özelliklerinden biri ve bu yazımızda da üzerinde duracağımız özelliği ise "tip tanımlamaları" yani statik dillerdeki gibi verinizin tipini kullanmadan önce tanımlamamıza gerek kalmıyor.
Integer bir değer gireceksek daha önceden int olarak tanımlamamıza gerek kalmıyacak.
Peki bu bize ne gibi kolaylıklar sağlayacak?
Bir program yazarken en büyük sorunlardan birisi de tip tanımlamalarıdır.Fakat python/ironpython ile ilerde değişkenleri değiştirmek istersek veya istisna oluşturacak durumlar varsa işimizi çok kolaylaştırır.

Tip tanımlamaları ile zaten bildiğimiz tipin adını üzerine yazımıyor muyuz?
Yukarıdaki karikatürdeki gibi zaten var olan nesnelerin üzerine isimlerini yazmaya ne gerek var ki? Programlama dilimiz bizim yerimize tipini yazmadığımız halde girdiğimiz değerlerin tipini algılasa daha güzel olmazmıydı?
İşte IronPython bunu bizim yerimize yapıyor :)
integer bir sayı bildiğimiz gibi sınırı +/-2.147.483.647 dir yani bu sayıların üzerinde tutamaz. Eğer bu sayıyı aşarsak overflow hatası alırız. Bunun gibi pek çok tipin aralıkları ve sabit halleri bulunmaktadır.
şimdi ise bunu bir örnekte görelim:
bir x sayısını 2 ile çarpalım;
x * 2
x = 2,000,000,000 olsun
Python/IronPython da
x * 2 = 4,000,000,000 dır
Ruby de
x * 2 = 4,000,000,000 dır
8 yaşındaki yeğenim de çarparak
x * 2 = 4,000,000,000 buluyor
fakat int olarak tanımlı C# ta
x * 2 = -294,967,296 // overflow hatası alırız...
bunun gibi pek çok alanda karşımıza çıkabilir. Örneğin faktöriyel hesabı yapan bir uygulamada dinamik dillerin farkı açıkça belli olur
>>>
def fact(sayi):
... if sayi == 1:
......
return 1
...
return sayi * fact(sayi-1)
>>>
fact(150)
571338395644585459047893286526105400318955357860112641825483758
331798291248453983931265744886753111453771078787468542041626662
501986845044663559491959220665749425920957357789293253572904449
624724054167907221184454371222696755200000000000000000000000000
00000000000l
>>>
fact(200)
788657867364790503552363213932185062295135977687173263294742533
244359449963403342920304284011984623904177212138919638830257642
790242637105061926624952829931113462857270763317237396988943922
445621451664240254033291864131227428294853277524242407573903240
321257405579568660226031904170324062351700858796178922222789623
703897374720000000000000000000000000000000000000000000000000l
hatta 1000 faktöriyel'i bile overflow hatası olmadan rahatlıkla hesaplayabiliriz.
istersek bunu tek satıra da indirgeyebiliriz:
def fact(x):
return (1
if x==0
else x * fact(x-1))
Peki tip tanımlamasındaki esneklikte neler yapabiliriz?
>>> x = "ibrahimkivanc"
>>>
print x
ibrahimkivanc
>>> x = 10
>>>
print x
10
>>> x = 10.53
>>>
print x
10.53
>>> x = True
>>>
print x
True
>>> x=["dizi","ilk","ikinci"]
>>>
print x
['dizi', 'ilk', 'ikinci']
x sayısını ilk başta tanımlamadık programımızda x değişkenini 5 farklı tipte, string, integer, float, bool ve bir dizi olarak kullandık. Bunun gibi pek çok farklı örnekler vermemiz mümkün.
Bu tip tanımlaması olmadığı için özellikle XNA oyun programlamada çok büyük kolaylıklar sağlıyacağı ve önümüzdeki günlerde IronPython ile Visual Studioda XNA projeler geliştilecek entegrasyonu geliştirileceği duyumlar arasında.
Bu yazımızda dinamik dillerin tip tanımlama özelliğine yakından baktık. Takıldığınız, sormak istediğiniz veya düzeltmek istediğiniz
yerleri
ibrahim.kivanc@msakademik.net
mail adresime iletebilirsiniz.
Hepinize kolay gelsin...