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] | [] | # | 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!