Yazılımda İsimlendirme Sorunsalı
Yazılımda, proje isminden değişkenlere kadar bir çok noktada isimlendirmeye ihtiyacımız var.
Bu isimlendirme çoğu zaman bizleri uzaklara daldırıp, düşündürmeye sevk etmektedir.
Sizin de hiç Escobar gibi düşündüğünüz oluyor mu? 😀
Peki neden bu kadar düşünüyor ve önemsiyoruz. Çoğu zaman yazdığımız kodları çok kısa bir süre geçmesine rağmen anlamıyor ve hatırlamıyoruz. Bu durumu hem bizim için hem de beraber kod yazdığımız diğer yazılımcılar için daha da zorlaştırmamak gerek. Koda yeni biri dokunduğunda, paket isimlerinden değişken isimlerine kadar anlamlı gelmesi ve kodu okuyan kişiyi yönlendirmeli, olduğunu anlayarak kodu geliştirmesine yardımcı olmalıdır.
Yıllarca önce yazılmış, dökümantasyonu olmayan ve kötü isimlendirilmiş değişkenlerden oluşan bir sisteme baktığımda, bir arkeologun, kaybolmuş ve eski bir medeniyetin gizemlerini bir çömlek parçasından çıkarmaya çalışmasındaki duyguyu hissederim. (David Scott Bernstein)
Sanırım bizleri en çok zorlayan noktalardan biri de metodlara isim vermek. Bazen yaptığı işleri tanımlamak zor olabilir ve karışık isimler verebiliyoruz. Zaten yaptığı işi kolayca tanımlayamıyorsak oraya dönüp tekrar bakmamız gerekir çünkü tanımlayamadığımız bir şeye isim veremeyiz öyle değil mi? 😀 Kötü isim verdiğimizi nasıl anlayabiliriz peki?
Değişken, metod ve ya class isimlerinden önce projelerin paket isimleri ya da database tabloları aaa1, aaa2 olarak isimlendirilmiş bile olabilir. Yani balık baştan kokuyor olabilir. Bu durumda ilk olarak buradan başlamalı ve bazı kurallar koymalısınız. SonarQubegibi pluginler kullanarak yazılımcılara tatlı uyarılar vermek faydalı olur.
S.O.L.I.D yazısında da bahsettiğimiz gibi bir metodun bir görevi olması gerekmektedir. Eğer isimlendirmede birden fazla fiil varsa bir şeylerin ters gittiği açıktır. Örneğin validateAndCalculate() isimli metod ‘and(ve)’ bağlacıyla iki fiili bağlamış ve birden fazla işi barındırdığı isminden bellidir ki burada bir şeylerin yanlış gittiği hissiyatı oluşmaktadır. Bize burada düşen görev kodun kim tarafından yazıldığına bakmadan refactor etmektir. 😀
Peki nasıl isimlendirmeliyiz?
Class | büyük harf ile başlar, camel case olur | isim | SpaceShip |
İnterface | büyük harf ile başlar, camel case olur | sıfat | Dockable |
Method | küçük harf ile başlar, camel case olur | fiil belirtmeli | ortbit, get ve set |
Instance ve static değişkenler | küçük harf ile başlar, camel case olur | İsim | moon |
Parametre ve lokal değişkenler | küçük harf ile başlar, camel case olur | tek kelime veya kısaltma | number, count, lop(line of position) |
Generic Tipler | tek büyük harf | T harfi önerilen harf | T |
Sabit | bütün harfler tek | kelimeler alt tire(_) ile ayrılır | LEAGUE, RED, EMAIL_FORMAT |
Enumaration | büyük harf ile başlar, camel case olur | isim | enum Occupation{MANNED, SEMI_MANNED, UNMANNED} |
Package | bütün harfler küçük | public package domainin tersi olmalıdır. | com.cemdirman
com.ocajexam.model com.ocajexam.dao |
Tablo 1.0
Örnekler;
- Classes ve Interfaces
Interface Bicyle
Class MountainBike implements Bicyle
2. Metod
void speedUp(int increment)
3. Değişken
int increment = 5
4. Sabit
static final int MAX_WIDTH = 5
Eğer sizin de kötü isimlendirilmiş örnekleriniz varsa detay vermeden bizimle paylaşabilirsiniz.
Kaynak
Tablo 1.0 : Oracle onaylı ‘Programmer 1 Study Guide’