28 Aralık 2008 Pazar

Python 3.0'da Söz Dizimi Değişiklikleri: Öznitelik İçin Açıklamalar (Attribute Annotations)

(Arkadaşlar merhaba. Bugün Özgür Sönmez arkadaşımız eposta yoluyla, Python 3.0'daki söz dizimi değişiklikleriyle ilgili nefis bir yazı, hatta sitemizin ismine uygun bir şekilde tabiri caizse nefis bir deneyim paylaşımında bulundu, ben de aynı şekilde buraya aktarıyorum. Sorularınız için yorumlarınızı bekleriz.)

Python 3000'de birçok değişiklik var; bunlardan biri de sözdizimindeki değişiklikler. Bugün burada özniteliklere açıklama eklemenin python 3000'de ne kadar kolay ve göze hitap eden bir biçimde yapılabildiğini göreceğiz. Öyle ki, açıklamalar artık string (katar) olmak zorunda bile değil:


def Toplam (x: "Toplanacak Birinci Sayı", y: "Toplanacak İkinci Sayı") -> "Toplamın Sonucu":
...


ifadesi;

def Toplam (x,y):
...


ifadesi ile fonksiyonel olarak aynı. Ancak python içinde bir kodda bu metodun __annotation__ özniteliğini kullanırsanız şu şekilde bir sözlük alırsınız:


{'x': 'Toplanacak Birinci Sayı'
'y': 'Toplanacak İkinci Sayı'
'return': 'Toplamın Sonucu'
}


python.org'da söylendiğine göre bu yenilik bir framework ya da metaclass deneyimini cesaretlendirmek için getirilmiş bir açıklama standardizasyonu. Örnekte de gördüğümüz gibi bu yenilik gerçekten göz kamaştırıcı. Öyle ki, py'ciler bununla kalmamışlar, örneğin:


def StoktanGetir(malzeme: "Getirilecek malzemenin adı", no: "Getirilecek malzemenin no'su" = 1):
...


ifadesinde olduğu gibi. Açıklamaları eklerken varsayılan parametreden de vazgeçilmemiş. Üstelik en önemlisi açıklamalar fonksiyon parantezlerinin içinde yer alıyor. Bir başka belirtmek istediğim şey de açıklamaların katar olma zorunluluğunun olmaması. Bir sözlük yapısında olduğu için __annotations__ içinde değer olarak giren açıklamalar her türden olabilir.
Anlaşılıyor ki bundan böyle fonsiyonlarımızı şöyle yazacağız:


def aligel(x: "Nereye (string)",
y: "Kentkartım doluysa true, değilse false (bool)") -> "Gelebilecekse true, gelemeyecekse false":


İyi Çalışmalar.

10 Aralık 2008 Çarşamba

PyGame hakkında

Pygame, Python kullanıcıları rahatça oyun geliştirebilsin diye Pete Shinners tarafından geliştirilmeye başlanmış bir Python pakedi. İçerisinde şu modüller ile birlikte geliyor :
  • Cdrom (manage cdrom devices and audio playback)
  • Cursors (load cursor images, includes standard cursors)
  • Display (control the display window or screen)
  • Draw (draw simple shapes onto a Surface)
  • Event (manage events and the event queue)
  • Font (create and render Truetype fonts)
  • Image (save and load images)
  • Joystick (manage joystick devices)
  • Key (manage the keyboard)
  • Mouse (manage the mouse)
  • Mask
  • Mixer
  • Movie (playback of movies)
  • Music (playback of music)
  • Overlay
  • Pixelarray
  • Rect
  • Sndarray
  • Sprite
  • Surface
  • Surfarray (manipulate images with Numeric)
  • Time (control timing)
  • Transform (scale, rotate, and flip images)
Görüldüğü üzere zenginlik konusunda karun kadar zengin PyGame. Avantajlarının biri de geliştirdiğiniz uygulamanın diğer işletim sistemlerine kolayca port edilebilmesi. Hatta işleme gerek kalmaksızın Mac sistemlerde direkt olarak çalışıyor.

Bu pakedi kullanarak geliştirdiğiniz ürünleri istediğiniz her hangi bir lisans ile yayınlayabiliyorsunuz (evet para kazanmak da mümkün). Gücünü SDL (Simple DirectMedia Layer) denen bir kütüphaneden alıyor. Bahsi geçen SDL, C ve Assembly dili kullanılarak yazılmış bolca optimizasyondan geçmiş, hız konusunda tartışmasız bir biçimde tatmin edici. Anlayacağınız PyGame'in duruşu pek şirin olsa da arkasında bir canavar yatıyor.

Aslına bakarsanız bir video kurgu programı yapmak için bile uygun gördüm kendisini, "oyun yapmak için kütüphane" tanımı biraz zayıf kalıyor kendisini anlatmaya.

Evet SDL kütüphanesi çok güçlü ama "Python dili oyun programlama yapmak için uygun mu?" sorusunu cevaplamak gerekiyor.

Python çok üst seviyeli bir dil, bir C kodundan yaklaşık 20 kat yavaş çalışıyor. Zaten bu programlama dilini tercih ederken pek performansına bakarak karar vermedik hiçbirimiz. Python dilinin asıl vurucu noktası bildiğiniz gibi kolay öğrenilir olması, ve size çok çabuk çözümler sunabilmesi. Python ve PyGame ile oyun yapmaya niyetlendiyseniz, bir "enemy-territory yapayım" şeklinde hayallere dalmanız sizi hayal kırıklığına uğratır. Yapabileceğiniz genelde hafif diye tabir edebileceğimiz oyunlar. Zaten genelde PyGame ile yapılmış oyunları incelediğinizde flash oyunu türevi ya da eski ATARI-C64 oyunlarının yeniden yapılmış halleri ile karşılaşıyoruz.

Bunların yanında PyGame hoş bir topluluğa sahip.İnsanları oyun geliştirilmesine teşvik etmek amacıyla "bir hafta içerisinde en güzel oyunu kim geliştirecek?" konseptine sahip bir yarışma düzenliyorlar adı da PyWeek. Siteye uğrayıp en azından o hafta yarışmaya katılmış oyunları oylamak bile yeterince eğlenceli bir aksiyon. Gerçekten güzel işler var ve tabi ki hepsinin kodları açık.