Pythonic Kod Yazımı

Python diğer tum dillerin aksine boşluklara ve girinti çıkıntılara çok fazla onem veren bir dil.Diğer birçok dilde donguleri başlattıktan sonra {} gibi parantez içine alırsınız.Ancak python'da bu yerine dongu içinde olduğunu belirtmek için boşluklar kullanılır.Haliyle bu da goze hoş gelen ve kolay okunan bir kod parçası ortaya çıkarır.Yoksa diğer dillerde yazılmış bir kodun tam olarak ne yaptığını anlamamız için ya çok fazla zaman harcıcaz ya da gelişmiş bir ide kullanmamız gerekecek.İşte tam bu noktada Python'un temel olarak aldığı ve benimde çok sevdiğim "Programlar insanların okuması, makinelerin çalıştırabilmeleri için yazılırlar" sozu buyuk onem taşıyor.

PixelBlocks/001/Python

Biz makinelerin çalıştıracakları kodlar ile uğraşmayacağımız için bize gerekli olan insanların okuması kısmıdır.Elbet her kodu insanlar okuyabilir.Ama dile gore okuma suresi buyuk oranda değişir.Python'un en iddalı olduğu alanlardan birisi belki de en başta gelen ozelliği kodlarının kolayca okunmasıdır.İşte bu noktada başlığa da yazdığım Pythonic Syntax deyimi akla geliyor.

Benim bundan 1-2 yıl once gorduğum ve okuduğumda tam istediğim dilin Python olduğuna karar verdiğim slaytlardan bir iki ufak başlıkları seçip buraya yazmak istedim.Eğer siz bu slaytların tamamını orjinal dilinden okumak isterseniz buradan ulaşabilirsiniz.

Her Python programcısı PEP8'i bilmelidir

PEP(Python Enhancement Proposal) Python'u geliştirme onerileridir.Python'u yazan kişilerden bu dilin gelişmesi için onerileri iyice okuyup benimsemek lazım.İlk girişte de yazdığım gibi Python'un Java,C,C++,C# gibi birçok dilden farklı bir yapısı vardır.Bunların başında boşluklar ve girintili yazma gelir.Tabi bu yazım da belirli kurallara dayanır.Onlardan bazılarını aşağıda yazacağım.

Boşluklar

  1. Her girinti için 4 boşluk kullanılması lazımdır.
  2. Hard tab kullanımından kaçınmak ve bu tabları boşluklar ile karıştırmamak lazım.
  3. Fonksiyonlar arasına bir satır, sınıflar arasına da iki satır koymak uygundur.
  4. Kullandığınız sozluk, liste, demet ve arguman listesinde virgulden sonra bir boşluk koymak gerekir.
  5. Karşılaştırma ve atamalarda aralara boşluk koyulmalıdır.(if meyve==elma: yerine if meyve = elma: )
  6. Parantezlerden once boşluk koyulmaz.
  7. Fonksiyonu tanıttığımız kısımda boşluk olmaz.

İsimlendirmeler

kucuk_harf gibi bir kullanımı fonksiyonlar, metodlar ve değişkenlerde kullanabiliriz. kucuk_harf ve BUYUK_HARF değişmez olarak kullanılabilir.FenSinifi gibi bir kullanımı genelde sınıfları tanımlarken kullanırız.Niteliklerde interface, _internal, __private gibi bir yapi kullanabiliriz.

Uzunluklar

Satır uzunluğunu 80 karakterden aşağıda tutmalıyız.Bu hem goze hoş gelir hem de daha sonra o kodu okuyacak kişiye rahatlık sağlar.Çok fazla ozellikli yapılarda aşağıdaki gibi bir yapı kullanabilirsiniz.

def __init__(self, first, second, third,
             fourth, fifth, sixth):
    output = (first + second + third
              + fourth + fifth + sixth)

Yatık çizgiyi() mumkun olduğunda son çare olarak kullanın.Hatta hiç kullanmayın.

VeryLong.left_hand_side \
    = even_longer.right_hand_side()

Birleşik ifadeler

Burada çok fazla kişi yanlış yapıyor.Aşağıda olması ve olmaması gereken iki durum var.Gorduğunde çok daha rahat anlayacaksınız.

Doğru

if foo == 'blah':
    do_something()
do_one()
do_two()
do_three()

Yanlış

if foo == 'blah': do_something()
do_one(); do_two(); do_three()

Docstrings ve Yorumlar

Docstings = Kodların nasıl kullanılacağını anlatır

Yorumlar = Niçin ve nasıl çalışacağını anlatır

Bu konuda gerçekten çok onemli.Çunku birçok kişi fonksiyonların veya sınıfların nasıl çalışacakları ile nasıl kullanılacakları arasındaki farkı karıştırabiliyor.Burada bilmemiz ve uymamız gerekenler PEP 257'de anlatılmış.

Değişken Değişimleri

Python'un diğer dillerden ne kadarda ustun olduğunu gostermek için sadece iki ornek kod veriyorum.Bunların ikisi de aynı işi yapıyor ve değişkenlerin değerlerini değiştiriyor.

Diğer diller

temp = a
a = b
b = temp

Python

b, a = a, b

3 satır oldu sana tek satır ? Bu olay Pythondaki bana en fantastik olgulardan birisi olan demetlerin bir ozelliği.Paketleme ve yeniden açma diye bilinir.Çok daha fazla bilgi için istihzaya bakabilirsiniz.

İnteraktif "_"

Bu benim birkaç yerde gorup uzerine gidince oğrendiğim gerçekten çok faydalı bir durum.Kısaca çağırdığımız fonksiyonlar geçici olarak _ isminde tutuluyor.Başta ilginç geliyor ancak kullanım sırasında olayın farkına varıyorsunuz.

>>> 1 + 1
2
>>> _
2

String Oluşturma

Benim yaptığım en buyuk hatalardan birisi de yeni bir string oluşturacağımız zaman kullandığım metoddu.İlk ornek benim onceleri yaptığım, ikinci ornek ise olması gereken ve bundan sonra yapacağım metod.

colors = ['red', 'blue', 'green', 'yellow']

result = ''
for s in colors:
    result += s

Yerine

result = ''.join(colors)

Ne kadar da basit ve tek satırmış değil mi.

Yukarıda yazdıklarım Python için guzel kod yazma aşamalarının sadece ufak bir kısmı.Bu konuda internette yapacağınız araştırmalarda çok daha fazla kaynak bulabilirsiniz.Örneğin bir Django kullanıcısı iseniz bu konuda stackoverflow'da çok guzel bir liste var.Aynı şekilde Python için yapılmış olanları da var.Python'un offical sitesinde de harika kaynaklar var.Özellikle benim tavsiyem iyice PEP 8 mantığını kavramak.Daha sonra zamanla devamı gelecektir.

comments powered by Disqus