in Temiz Kod

Anlamlı İsimlendirme

30 Ocak-2 Şubat tarihleri arasında Akademik Bilişim 2016 organizasyonunun düzenlediği Temiz Kod kursuna eğitime katılmıştım. Uzun süredir okumayı planladığım fakat bir türlü gerekli motivasyon ve zamanı ayıramadığım Robert C. Martin’in Clean Code kitabını da bu kurs boyunca okudum. Hem kurs notlarımdan hem de kitaptan faydalanarak bir yazı dizisi yazmaya karar verdim.

Kısa bir önsözün ardından kitabında 1. konusu olan Meaningful Names yani Anlamlı İsimlendirme’yi anlatalım.

Not: Bölüm isimlerini Türkçe’ye çevireceğim.Fakat örnek kodlarda İngilizce kullanmaya devam edeceğim.Bazı şeylerin İngilizce kalması anlam bütünlüğü açısından daha doğru oluyor.

 

Değişkenler

İsimlendirme yaparken mümkün oldukça değişkenin anlamı verilmeli. Yorum satırında belirteceğimize isimlendirme yaptığımız değişken veya metoda o yorumu isim olarak vermeliyiz.

int d; // days of year

gibi bir kod yerine

int daysOfYear;

daha uygun bir ifade olacaktır. Çünkü çoğu zaman kod değişir ama yorum satırı değişmez. Hem okunabilirlik hem de gelecekteki bakım için hayati önem arz eden bir konu.

Yanlış Bilgilendirmeden Kaçınmak

List yapısı kullanılmadığı halde o değişkene accountList isimlendirmesi yapılmamalı. Çünkü List kelimesi her programcı için bir veri yapısını çağrıştıracaktır. Bu nedenle kullanılan veri yapısına uygun olarak isimlendirme yapılmalı. Bu örnek için accountGroup veya bunchOfAccounts daha uygun bir isim olacaktır. Bu kurala göre Map,Tree gibi veri yapılarının kullanılmadığı değişkenlere de aynı şekilde bu kelime öbeklerini isim olarak vermemeliyiz.

Birbirine çok benzeyen uzun isimler verilmemeli. Örneğin; XYZControllerForEfficientHandlingOfStrings ve XYZControllerForEfficientStorageOfStrings isimlerinin arasındaki fark kolay anlaşılabiliyor mu? Tabii ki hayır. Bu nedenle ilk bakışta anlaşılacak şekilde farklı kelimeler kullanarak vermek daha uygun olur.

Sınıf İsimlendirmeleri

Classes and objects should have noun or noun phrase names like Customer , WikiPage ,
Account , and AddressParser . Avoid words like Manager , Processor , Data , or Info in the name
of a class. A class name should not be a verb.

Sınıf ve nesne isimleri fiil değil Customer,Account,AddressParser gibi isim olan yapılar tercih edilmeli. Ayrıca

Metodlar

theList,getThem gibi neyin listesinin belli olmadığı veya neyi çektiğimizin belli olmadığı isimlendirmeler kullanmamalıyız. Böyle durumlarda mutlaka ismi veya fiili niteleyen kelime eklemeliyiz. Örnek; getEmail() yerine getCustomerEmail() gibi.

Kısaltmalar

Kısaltmalardan kaçınmalıyız.Herkesin bildiği json,url gibi kısaltmalardan ziyade başkalarının bilmediği kelime öbeklerini kısaltmamalıyız. daysOfYear gibi bir değişkeni “doy” olarak tanımlarsak bu kısaltmayı bilmeyen birisi için herhangi bir  anlam ifade etmeyecektir.

Okunabilirlik

Seçtiğimiz isim günlük hayatta konuşurken zor olmayan bir yapıda olmalı. getYYYY() gibi bir metod ismini başka bir yazılımcıya anlatırken anlaşmazlık ortaya çıkabilir. İngilizce okursak ” get vay vay vay vay” gibi birşey çıkacak ortaya. Bu da iletişim esnasında istenen bir durum olmaz.

Eklendirmeler

İsimlendirme yaparken ismin önüne ek harf koymamak gerekiyor.

IUserService  -> UserService

UserService -> UserServiceImpl

İlk satırdaki interface önünde I harfi bulunuyor. Fakat her yerde kullanacağımız için interface’in ismini olabildiğince kısa tutmak gerekiyor.

İkinci satırdaki kullanım daha kullanışlı oluyor. Zaten implementasyonu kullanan frameworkler olduğu için o ismi biz her yerde kullanmıyoruz.Framework bizim yerimize yapıyor.

Şirinlik Yapma!

İsimlendirme yaparken sadece çalıştığımız ekip içerisindekilerin anlayabileceği bir şaka veya isim koymak gelecek için büyük sorun yaratabilir. Çünkü yeni gelen bir yazılımcı veya projeyi devralan başka bir ekip o ismin anlamını bilmeyebilir. Bu nedenle sadece ekip içinde anlaşılabilecek veya kültür bazlı şakalar yapılmamalı.

Tek Konsept İçin Tek  Kelime

Bir konsept için bir kelime seçilmeli. Veritabanı işlemleri yapan bir sınıfta fetch,retrive,get gibi aynı anlama gelen farklı isimlerin olması anlam karmaşasına yol açar.

Döngülerde isimlendirme

Döngülerde i,j,k harflerini kullanmanın (daha fazlasına ihtiyaç varsa sıkıntı vardır) herhangi bir sorunu yoktur.

Genel kelimelerden kaçınma

UserManager, UserProcessor, UserData, UserInfo, Utils, Helper gibi çok genel anlam içeren kelimeler gibi kullanımı ileriki süreçte sorun yaratabilecek kelimeler kullanılmamalıdır. Örneğin; UserManager isminde bir isim User ile ilgili her işlemin o sınıf altında toplanmasına yol açar.Bu da ileri ki süreçte Tek Sorumluluk Prensibine ters olacaktır.

Design Pattern

Design Pattern kullanılıyorsa kullanılan pattern’in sınıf ismine eklenmesinde sorun olmayacaktır. Bilakis o design pattern’in kullanıldığını ifade eder.

Scope

Küçük alanlarında (2-3 satırlık if koşulunda gibi) anlamsız kısa isimlendirmeler yapılabilir. Date d gibi.

Uzun isimlendirme

Exceptional ve Inner classlara uzun uzun isimler verebiliyoruz. Çünkü çok az kullanılırlar. Çok kullanılan isimleri mümkün oldukça kısa tutmak gerekiyor.

Boolean isimlendirme

Boolean isimlendirme yaparken  isSetupCompleted, hasOwner gibi isimlendirmeler daha okunabilir olur.Böylece o metodun boolean değer döndürdüğünü hızlıca anlayabiliriz.

 

Amma kural varmış, alt üstü isim veriyoruz dediğinizi duyar gibiyim. Bir programcının çok sık yaptığı isimlendirme işte bu kadar önemli. Tabii bu kuralları takip etmek zorunda değiliz. Fakat bunları takip etmek gelecekte yol açacak sorunları çözmede çok yardımcı olacaktır.

Yorum yaz

Comment