Günümüzde sıfırdan başlanarak ticari bir yazılım geliştirilmesi, özellik, arayüz ve protokol çeşitliliğinin getirdiği kompleksite artışı ve pazara çıkış sürelerinin giderek kısalması nedeniyle neredeyse imkansızdır. Bu yüzden mevcut kod parçalarının doğrudan ya da değiştirilerek kullanılması bir zorunluluk haline gelmiştir.
Yeniden kullanılacak kod parçaları kurum içinde üretilmiş olabileceği gibi, açık kaynak kodlarıya da satın alınmış kodlar olabilir. Bu kod parçalarının verimli ve güvenli olarak kullanılabilmeleri için kolay anlaşılabilir ve değiştirilebilir olmaları çok önemlidir. Kurum içinde üretilmiş de olsa, kodun ilk geliştiricisinin uzun zaman önce ayrılmış olması, bir üst düzey yöneticinin kodu olması durumunda, sıklıkla “koddaki şu açıklamada (// yyyy) ne demek istemiştiniz” gibi sorular sorma şansının olmaması, ya da kendi kodu da olsa altı ay sonra detayları hatırlama zorluğu, kodla yeni sahibini başbaşa bırakacaktır.
Tüm bu nedenlerle yazılımcıların aşağıdaki konuları anlaması ve dikkat etmesi oldukça önemlidir;
İyi kod ve kötü kod arasındaki fark,
İyi kod yazmak ve kötü kodu iyi koda dönüştürmek,
İyi isimler, iyi fonksiyonlar, iyi nesneler (object) ve iyi sınıflar (class) oluşturmak,
Maksimum okunabilirlik için kodu formatlamak,
Kod yapısını bulanıklaştırmadan hata işlemek (error handling),
Birim test yapmak ve test odaklı geliştirme (TDD).
Robert C. Martin’in Clean Code - A Handbook of Agile Software Craftsmanship (Temiz Kod – Çevik Yazılım İşçiliği Elkitabı) adlı eserinde temiz kod yazmanın prensipleri, örüntüleri (pattern) ve pratikleri anlatılmaktadır. Bu blog yazısında uzun uzun anlatamayacağım için, konuyla ilgili fikir vermek ve teşvik etmek amacıyla, kitabın isimlendirmeyle ilgili birinci bölümünü ana başlıklarıyla aşağıda özetlemeye çalıştım.
1) Niyeti ortaya koyan isimler kullanın
Değişken, fonksiyon ya da sınıf ismi, neden var olduğunu, ne yaptığını, ve nasıl kullanıldığını anlatmalıdır.
int g; // gun olarak gecen zaman
yerine
int gunOlarakGecenZaman;
int atamadanBeriGecenGun;
int degisikliktenBeriGecenGun;
int gunOlarakDosyaYasi;
gibi isimler seçilmelidir.
2) İsimde yanlış bilgilendirmeden kaçının
Bir grup hesaba gerçekten liste değilse hesapListesi demeyin. hesapGrubu, birGrupHesap ya da sadece hesaplar daha iyi olacaktır.
Yanıltıcı isimlendirmeye en uç örnek değişken ismi olarak küçük L ya da büyük o kullanmak olacaktır.
int a = l;
if (O == l)
a = Ol;
else
l = Ol;
Kullanılan editör ve fonta bağlı olarak küçük L birle, büyük o sıfırla karıştırılabilir.
3) İsimleri anlamlı olarak farklılaştırın
İsimleri numara ekleyerek farklılaştırmak yanlış bilgi vermekten öte hiç bilgi içermez.
public static void copyChars(char a1[], char a2[]) {
for (int i = 0; i < a1.length, i++) {
a2 = a1;
}
}
Argüman olarak kaynak ve hedef k
4) Telaffuz edilebilir isimler kullanınTelaffuz edilebilir isimler kullanmak anlaşılırlığı kolaylaştıracağı gibi takım içi iletişimi de kolaylaştıracaktır. Telaffuz edemiyorsanız, üzerine tartışmanız da bir hayli zor olacaktır. olsyagsdsn (oluşturma tarihi, yıl, ay, gün, saat, dakika, saniye) değişkeninden bahsederken “Buradaki olsyag se de se ne değişkeni int olmalı” benzeri konuşmalar sıkça duyulacaktır çünkü programlama sosyal bir aktivitedir.
5) Aranabilir isimler kullanın
Tek harflik isimler ve numerik sabitlerin metin içinde aranması kolay değildir. OGRENCI_BASINA_EN_COK_SINIF’ı bulmak 7’yi bulmaktan kolaydır. Tek harflik isimler sadece kısa metodların içindeki lokal değişkenler için kullanılabilir.
Aşağıdaki iki kod parçasını karşılaştırınız.
for (int j = 0; j < 34; j++) {
t += (g[j]*4)/5;
}
,
int reelGunSayisi = 4;
const int HAFTALIK_CALISMA_GUNU = 5;
int toplam = 0;
for (int j = 0; j < GOREV_SAYISI; j++) {
int reelGorevGunleri = gorevKestirimi[j] * reelGunSayisi;
int reelGorevHaftalari = (reelGunler/HAFTALIK_CALISMA_GUNU);
toplam += reelGorevHaftalari;
}
6) Kodlamadan kaçının
İsim uzunluğu sınırlaması olan eski dillerde bu kuralı çiğnemek zorunluydu. Fortran, ilk harfin türü belirten bir kod olması kuralı nedeniyle kodlamaya zorlayan bir dildi. Ancak günümüzün güçlü tür kontrolü yapan modern dillerinde böyle bir sınırlama bulunmamaktadır.
int iTelefonNumarasi;
yerine
int telefonNumarasi;
kullanılırsa değişkenin long yapılması gerekince ismin değişmesi gerekmeyecektir.
Sınıf ve fonksiyon üye isimlerinde de ‘_’, ‘m_’ ya da ‘its’ benzeri kodlamalara gerek yoktur çünkü sınıf ve fonsiyonlarınız bunlara gerek duymayacak kadar kısa olmalıdır. Ayrıca üye isimlerini renklendiren bir editör kullanılmalıdır.ullanılırsa bu fonksiyon daha anlaşılır olacaktır, İyi Günler.
Yeniden kullanılacak kod parçaları kurum içinde üretilmiş olabileceği gibi, açık kaynak kodlarıya da satın alınmış kodlar olabilir. Bu kod parçalarının verimli ve güvenli olarak kullanılabilmeleri için kolay anlaşılabilir ve değiştirilebilir olmaları çok önemlidir. Kurum içinde üretilmiş de olsa, kodun ilk geliştiricisinin uzun zaman önce ayrılmış olması, bir üst düzey yöneticinin kodu olması durumunda, sıklıkla “koddaki şu açıklamada (// yyyy) ne demek istemiştiniz” gibi sorular sorma şansının olmaması, ya da kendi kodu da olsa altı ay sonra detayları hatırlama zorluğu, kodla yeni sahibini başbaşa bırakacaktır.
Tüm bu nedenlerle yazılımcıların aşağıdaki konuları anlaması ve dikkat etmesi oldukça önemlidir;
İyi kod ve kötü kod arasındaki fark,
İyi kod yazmak ve kötü kodu iyi koda dönüştürmek,
İyi isimler, iyi fonksiyonlar, iyi nesneler (object) ve iyi sınıflar (class) oluşturmak,
Maksimum okunabilirlik için kodu formatlamak,
Kod yapısını bulanıklaştırmadan hata işlemek (error handling),
Birim test yapmak ve test odaklı geliştirme (TDD).
Robert C. Martin’in Clean Code - A Handbook of Agile Software Craftsmanship (Temiz Kod – Çevik Yazılım İşçiliği Elkitabı) adlı eserinde temiz kod yazmanın prensipleri, örüntüleri (pattern) ve pratikleri anlatılmaktadır. Bu blog yazısında uzun uzun anlatamayacağım için, konuyla ilgili fikir vermek ve teşvik etmek amacıyla, kitabın isimlendirmeyle ilgili birinci bölümünü ana başlıklarıyla aşağıda özetlemeye çalıştım.
1) Niyeti ortaya koyan isimler kullanın
Değişken, fonksiyon ya da sınıf ismi, neden var olduğunu, ne yaptığını, ve nasıl kullanıldığını anlatmalıdır.
int g; // gun olarak gecen zaman
yerine
int gunOlarakGecenZaman;
int atamadanBeriGecenGun;
int degisikliktenBeriGecenGun;
int gunOlarakDosyaYasi;
gibi isimler seçilmelidir.
2) İsimde yanlış bilgilendirmeden kaçının
Bir grup hesaba gerçekten liste değilse hesapListesi demeyin. hesapGrubu, birGrupHesap ya da sadece hesaplar daha iyi olacaktır.
Yanıltıcı isimlendirmeye en uç örnek değişken ismi olarak küçük L ya da büyük o kullanmak olacaktır.
int a = l;
if (O == l)
a = Ol;
else
l = Ol;
Kullanılan editör ve fonta bağlı olarak küçük L birle, büyük o sıfırla karıştırılabilir.
3) İsimleri anlamlı olarak farklılaştırın
İsimleri numara ekleyerek farklılaştırmak yanlış bilgi vermekten öte hiç bilgi içermez.
public static void copyChars(char a1[], char a2[]) {
for (int i = 0; i < a1.length, i++) {
a2 = a1;
}
}
Argüman olarak kaynak ve hedef k
4) Telaffuz edilebilir isimler kullanınTelaffuz edilebilir isimler kullanmak anlaşılırlığı kolaylaştıracağı gibi takım içi iletişimi de kolaylaştıracaktır. Telaffuz edemiyorsanız, üzerine tartışmanız da bir hayli zor olacaktır. olsyagsdsn (oluşturma tarihi, yıl, ay, gün, saat, dakika, saniye) değişkeninden bahsederken “Buradaki olsyag se de se ne değişkeni int olmalı” benzeri konuşmalar sıkça duyulacaktır çünkü programlama sosyal bir aktivitedir.
5) Aranabilir isimler kullanın
Tek harflik isimler ve numerik sabitlerin metin içinde aranması kolay değildir. OGRENCI_BASINA_EN_COK_SINIF’ı bulmak 7’yi bulmaktan kolaydır. Tek harflik isimler sadece kısa metodların içindeki lokal değişkenler için kullanılabilir.
Aşağıdaki iki kod parçasını karşılaştırınız.
for (int j = 0; j < 34; j++) {
t += (g[j]*4)/5;
}
,
int reelGunSayisi = 4;
const int HAFTALIK_CALISMA_GUNU = 5;
int toplam = 0;
for (int j = 0; j < GOREV_SAYISI; j++) {
int reelGorevGunleri = gorevKestirimi[j] * reelGunSayisi;
int reelGorevHaftalari = (reelGunler/HAFTALIK_CALISMA_GUNU);
toplam += reelGorevHaftalari;
}
6) Kodlamadan kaçının
İsim uzunluğu sınırlaması olan eski dillerde bu kuralı çiğnemek zorunluydu. Fortran, ilk harfin türü belirten bir kod olması kuralı nedeniyle kodlamaya zorlayan bir dildi. Ancak günümüzün güçlü tür kontrolü yapan modern dillerinde böyle bir sınırlama bulunmamaktadır.
int iTelefonNumarasi;
yerine
int telefonNumarasi;
kullanılırsa değişkenin long yapılması gerekince ismin değişmesi gerekmeyecektir.
Sınıf ve fonksiyon üye isimlerinde de ‘_’, ‘m_’ ya da ‘its’ benzeri kodlamalara gerek yoktur çünkü sınıf ve fonsiyonlarınız bunlara gerek duymayacak kadar kısa olmalıdır. Ayrıca üye isimlerini renklendiren bir editör kullanılmalıdır.ullanılırsa bu fonksiyon daha anlaşılır olacaktır, İyi Günler.