Tonguç Yumruk'un Weblog'u
Anlık olaylar, fikirler, gudik ismail vs...

Wed, 01 Sep 2004

Bildiğiniz (veya şu anda öğrendiğiniz) gibi python çok güzel bir dil. Veri tipi tanımlama derdinden bizi kurtarırken string'le int'i toplayamayacağımızı bilecek kadar da akıllı. Fakat bu dinamik tipleme yapan (ki yazının kalanında tipsiz diyeceğim kendilerine) dillerin önemli bir problemi var. Bildiğiniz gibi C, Pascal gibi dillerde fonksiyonlarımızı tanımlarken parametrelerin hangi tipte olacağı ve ne tipte veri döndüreceği gibi şeyleri de tanımlarız. Bu bize çok önemli bir fayda sağlar. Eğer bir kütüphane (modül, library) yazıyorsak ve bu kütüphaneyi kullanan b,r programcı bizim veri tanımımıza uymazsa derleyici şikayet eder. Halbuki tipsiz dillerde biz sadece parametrelerin isimlerini veririz ve tipine karışmayız.

Bunun avantajları olduğu gibi dezavantajları da vardır. Avantajı nedir? Örneğin fonksiyonunuzda sadece parametre olarak geçirilen değişkenin read() fonksiyonunu kullanıyorsanız bir read() fonksiyonu içeren her nesne fonksiyonunuza parametre olarak geçirilebilir. Dezavantajı ise siz sadece belli bir tipte veriyi kabul etmek istediğinizde ortaya çıkar. Her parametreyi teker teker isteğinize uygun mu diye kontrol edip terslik durumunda uygun exception'ları raise etmeniz (aman tanrimcim bu nasıl bir türkçe) gerekir. Bu en basit haliyle hamallıktır ve bence bir şekilde çözülmesi gerekir.

Bu konuda çözüm olabilecek bir önerim var. Veri tiplerini fonksiyon tanımında vermek güzel bir yöntem olmakla beraber eğer C tarzında gidilirse esnekliği büyük oranda kısıtlayacaktır. Bu sebeple Python'un doğasna uygun bir tanımlama sistemi geliştirilmelidir. Bu noktada benim aklıma gelen çözüm if deyimlerinin içerisinde kullandığımız karşılaştırma operatörlerine benzer bir yapı kullanılmasıdır.

Tipik bir python fonksiyon tanımı şu şekilde gösterilebilir.

def fonksiyon(parametre):
	...

Burada yapmamız gereken parametrenin tipini belirten bir işareti uygun bir yere yerleştirmektir. Örneğin Viyaduk diye bir sınıfımız olduğunu ve fonksiyonunumuzun parametresinin yalnızca bu sınıf veya bunun alt sınıfları olmasını istediğimizi varsayalım. Şu şekilde bir fonksiyon tanımı yapabiliriz:
def fonksiyon(parametre >= Viyaduk, parametre2 == dict, parametre3 != Dombili):
	...

Burada sırayla olan biteni açıklamamız gerekirse >= operatörü ile ilk parametremizin Viyaduk sınıfından veya onun alt sınıflarından olması koşulunu koymuş olduk. ikinci parametremizde ise == operatörü ile o paramtrenin kesinlikle bir dict tipinde olması şartını getirdik. Son parametremiz ise parametrenin dombili sınıfından olmasını yasakladı. Tabiiki burada != gibi bazı operatörlerin gerekliliği sorgulanabilir fakat bulunmasından zarar geleceğini sanmıyorum. Hatta "in" operatörünün yardımıyla parametre olarak aldığımız nesnenin belirli bir fonksiyonu içerdiğinden daha fonksiyon tanımı sırasında emin olabiliriz.

Bu yazım tarzı tabiiki mecburi olmayacaktır. İsteyen programcılar için parametreleri sadece isimle tanımlama özelliği bu tip bir tanım sözdizimi ile birlikte sorunsuz kullanılabilir.

Not:Bu yazıyı benim için ingilizceye çevirip Python listelerine ulaştıranlar olursa çok mutlu olurum, zira ben çevirmeye üşeniyorum...

[23:24] | [/kod] | # | G! |
Yine baş ağrısı, yine verimsiz geçen bir gün. En pis yanı ise bünyenin bir süre sonra ağrı kesiciye de alışıyor olması. Bünye alışmasın diye ilaç almıyorsun, hafif olan baş ağrısı katlanarak artıp tüm günün içine ediyor. Yok ilaç alırsan bu sefer bünye alışıyor ve tıpkı uyuşturucu bağımlıları gibi doz artırmak zorunda kalıyorsun ki bu da pis bir olay... Kısacası değneğin iki ucu da pek temiz değil. Şu bilim adamları oturup buna bir çare bulsalar ya. Mesela kafa denen organı (ki her türlü sorunun kaynağı bu aslında, çıbanın başı) tamamen ortadan kaldırsak...
[22:38] | [/misc] | # | G! |
Elektrikli Posta
Uptime
1 yıl, 26 gün, 4 saat, 31 dakika
Çocuklara Bilgisayar
Kategoriler
/ (201)
  dev/ (13)
  kod/ (28)
  life/ (2)
  linux/ (38)
    freedays/ (2)
    senlik/ (0)
      2006/ (15)
  misc/ (58)
  mobil/ (3)
  musiki/ (18)
  net/ (10)
  tech/ (9)
  web/ (5)
Zaman Makinesi
< September 2004 >
SuMoTuWeThFrSa
    1 2 3 4
5 6 7 8 91011
12131415161718
19202122232425
2627282930  
Kapı Komşuları
Güzel Siteler
Ivır zıvır
XML Feed

FSF Associate Member: 2040

Powered by PyBlosxom

Valid XHTML 1.0!