Güzel Kod Yazma Sanatı

Öncelikle belirteyim, bu alanda guru falan değilim. Ancak, şu ana kadar okuduklarım, tecrübe edindiklerim ışığında kendi “güzel kod yazma” fikirlerime sahibim. Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. Ve son söyleyeceğimi baştan söyleyeyim; Robert C. Martin‘in Clean Code isimli kitabını edinin ve birkaç kez okuyun. Şu ana kadar okuduğum en iyi teknik kitaplardan birisi diyebilirim.

Güzel Kod

“Güzel Kod” kavramı kişiden kişiye değişebilir, ancak sanıyorum üç aşağı beş yukarı genel olarak benzer fikirler mevcuttur. Aslında, tek başınıza kod yazıyorsanız ve yazdığınız kod sadece sizin tarafınızdan okunacaksa, sizin için anlaşılır olanı, gözünüze hoş geleni yapmak yeterli olacaktır. Ancak, aynı kod üzerinde uğraşan kişi sayısı artmaya başladıkça, yazdıklarınızın anlaşılabilirliği üzerine sürekli düşünmeniz gerekecektir. Yazdığınız kod parçası başkası tarafından okunurken anlaşılması için 10 kere okunması gerekmesin.  Ayrıca kötü yazılmış kodun hatalardan arındırılması da zorlaşabilecektir.

Şimdi birkaç başlık halinde “Güzel Kod” örneklerine bakalım. Tekrar belirteyim, tüm yazdıklarım okuduğum kitapların (özellikle de Clean Code‘un) ve kendi tecrübelerimin sentezi sonucu ortaya çıkan kendi düşüncelerimdir.

İsimlendirme

Kod içerisindeki herşeyin isimlendirmesi. Değişkenlerin, fonksiyon/metodların, sınıfların… İlk vereceğim tavsiye, değişken, metod, sınıf neyi temsil ediyorsa açık açık o şekilde isimlendirin.

String var1; // isim
int var2; // yaş
//...
var1 = "ali"; // 156. satır
var2 = 15;

Kodunuzu okuyan ikinci bir kişi kod parçasının 156. satırında var1 değişkenine bir string atadığınızı gördüğünde bu değişkenin ne işe yaradığını çözmesi için kafasında bir çözümleme yapması gerekir. “ali”, değişkenin bir isim olduğunu az çok gösteriyor ama bu kimin ismi, kendisinin mi, babasının mı, ilkokul arkadaşının mı? Çok da belli değil.

String ownName;
int ownAge;
//...
ownName = "ali";
ownAge = 15;

Sanırım artık durum daha anlaşılır oldu. Bir değişken neyi temsil ediyorsa basit, anlaşılır şekilde onu ifade edin. Mümkün olduğunca kısa tutmaya çalışın ama kısa olması için de kısaltmalar yapmayın. Örneğin;

String doorHandCol; // çok anlaşılır değil
String doorHandleColor; // açık ve anlaşılır

Fonksiyon/Metod isimleri için de benzer kural geçerli. Açık, anlaşılır, ne yaptığını (ne azını ne çoğunu) anlatan.

public void function1(); // anlamsız isimlendirme
public void createFormVariables(); // anlamlı, örneğin, bu metodun form değişkenlerini yarattığı açıkça anlaşılıyor.

Metod içerisinde ne yapılıyorsa ismini o şekilde verin demiştim. Ya da tam tersi, metod isminde neyi berlittiyseniz metod onu yapsın.

public void createFormVariables() {
    // form değişkenlerine ilk değerlerini ver
    // ...
    showForm(); // metod ismiyle uyumsuz fonksiyonellik
}

Eğer, metod içinde gerçekten showForm metodunu çağırmanız gerekiyorsa metodun ismini değiştirin. Örneğin;

public void createFormVariablesAndShowForm() {
    // form değişkenlerine ilk değerlerini ver
    // ...
    showForm(); // metod ismiyle uyumsuz fonksiyonellik
}

Artık metod isminin belirttiği işi yapıyor ancak şimdi de alakasız iki işi birden yapmaya başladı (bu konuya fonksiyonlar/metodlar başlığında değineceğim).

Sınıf isimleri olabildiğince somut isimlerden oluşmalı ve olabildiğince kapsamlı isimler olmalı. Örneğin; Man, Woman gibi isimlendirmeler yerine Person sınıfı yapılıp, Person sınıfına cinsiyet değişkeni verilmeli.

Fonksiyonlar/Metodlar

Bu başlıkta tek bir konudan bahsetmek istiyorum. Yazdığınız metodlar/fonksiyonlar mümkün olduğunca minimal basit işler yapmalı. Metodlar içerisinde yapılan işlerin birbiriyle ilişkili işler olmasına dikkat edin. Son verdiğim örnekteki (createFormVariablesAndShowForm) metodlardan mümkün olduğunca kaçının. createFormVariables ve showForm metodlarını ayırın ve ikisini daha genel bir metottan çağırın.

Gösterim Biçimi (Notations)

Burada en çok bilinen iki gösterim biçiminden bahsedeceğim. hungarian_notation ve CamelCase.

Hungarian notation örneği;

int button_width = 200;

CamelCase örneği;

int buttonWidth = 200;

Ben CamelCase gösterimi kullanıyorum. Gözüme daha hoş ve anlaşılır geliyor. Üstelik sürekli alt tire yapma dolayısıyla fazla karakter derdinden de kurtarıyor. Genelde de CamelCase gösterim kullanılıyor diye biliyorum.

Değişken ve metod/fonksiyon isimlerinde ilk harf küçük diğer her kelimenin ilk harfi büyük şekilde, sınıf isimlerinde ise tüm kelimelerin ilk harfi büyük şekilde yazmaya çalışın.

String submitButtonText;
// ...
public void onSubmitButtonClicked ();
// ...
public class SubmitForm {}

Bir de eskiden kalma bir alışkanlık var. Sınıfların elemanlarının başına m_ öneki koymak.

int m_submit_button_width;
int mSubmitButtonWidth;

Kocaman bir sınıfın içinde kullandığınız değişkenin sınıfın değişkeni olduğunu göstermek için. Ancak, günümüzdeki hemen tüm kod geliştirme araçları bu elemanları renklendirdiği için bu kullanıma da artık yok.

Açıklamalar (Comments)

Açıkçası Clean Code‘u okuyana kadar düşüncem, kodlara mümkün olduğunca açıklama yazmaktı. Ancak, kitap beni bu konuda farklı yönde ikna etti; mümkün olduğunca az açıklama yazın 🙂

Kitabın savı da şu; çok açıklama kodunuzun az anlaşılır olduğunu gösterir. Bir nevi ters orantılı yani. Açıklama yazmak kolay iş ancak bu sefer de açıklamalar arasında kod parçalarını bulmaya uğraşacaksınız 🙂 Peki açıklama yazmazsak kodumuz nasıl anlaşılacak? Yazının başından beri anlatmaya çalıştığım şekilde. Güzel ve anlaşılır yazmaya çalışarak 🙂 Kısa ve net.

Giriş

Bu bölüm hem giriş hem sonuç olarak düşünülebileceği için giriş ismi vermeyi tercih ettim. Kod yazarken ilk başta en güzel kodu yazmaya zorlamayın kendinizi. Zaten ilk yazdığınız kod büyük ihtimalle yanlış ve az anlaşılır olacaktır. Üzerinden tekrar tekrar geçin, üzerinde tekrar tekrar düşünün. Gereksiz kısımları başka yere taşıyın. Alakasız metodları birbirinden ayırın. Değişkenlerinizi daha düzgün isimlendirmeye çalışın. Kodu sadece kendiniz geliştiriyor olsanız bile güzel, temiz, anlaşılır yazmaya çalışın.

Son olarak; mutlaka Clean Code‘u okuyun 🙂

7 Comments

    Güzel Kod Yazma Sanatı « Lé Blog

    […] Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. … Devamı için : Güzel Kod Yazma Sanatı Share :FacebookTwitterStumbleUponLinkedInLike this:LikeBe the first to like this […]

    Güzel Kod Yazma Sanatı | Boğaç Aslanyürek

    […] Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. … Devamı için : Güzel Kod Yazma Sanatı Like this:LikeBe the first to like this post. This entry was posted in Professional and tagged […]

    Güzel Kod Yazma Sanatı | Gökhan Tunçkale | Blog

    […] Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. … Devamı için : Güzel Kod Yazma Sanatı ShareFacebookTwitterStumbleUponMoreTumblrRedditLinkedInDiggEmailPrintLike this:BeğenBe the first […]

    Güzel Kod Yazma Sanatı « Musa Usta'nın Yeri

    […] Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. … Devamı için : Güzel Kod Yazma Sanatı Share this:TwitterFacebookLike this:BeğenBe the first to like this post.   Leave a […]

    Güzel Kod Yazma Sanatı | Kara Kule

    […] Yazıda belirteceğim konular da bunların sentezi şeklinde olacak. … Devamı için : Güzel Kod Yazma Sanatı Share this:TwitterFacebookLike this:BeğenBe the first to like this post. By ahmet orsorlu […]

    Emre Macit

    çok güzel bir yazı olmuş, ben de bu konudan bahsetmek isterdim, ekelyeceğim çok da bir şey kalmamış. Eline sağlık.

      Ahmet Orsorlu

      Aslında yazacak daha çok şey var ama yazı inanılmaz bir hal alacak diye kısalttım biraz 🙂 Çok daha fazlası kitapta 🙂

Bir Cevap Yazın