Kafayı yiyecektim! Dün gece basit bir API endpoint'i yazıyordum. 50 satırlık bir fonksiyon, iç içe geçmiş 4 tane if bloğu, bir sürü sihirli sayı (magic number) ve değişken isimleri olarak a, temp, data2... Mouse'u kaydırdıkça burnuma ağır bir koku gelmeye başladı. Meğerse sorun benim kodumun ta kendisiymiş. Code smell alarmı çalıyordu ve ben onu görmezden gelmeye çalışıyordum. Artık olmuyor, gözümü o kadar çok batırıyorlar ki, düzeltmeden bir sonraki satıra yazamaz oldum.
Nefes Alamıyorum: O İğrenç "Long Method"
Şaka gibi ama, bir fonksiyona bakıyorsun ve "Bu ne yapıyor acaba?" diye kendine soruyorsun. Cevap: "Her şeyi!". Şu kodu görünce içim daralıyor:
Hemen içgüdüsel olarak parçalara bölmeye başlıyorum. extract method refleksim o kadar gelişti ki, artık IDE'mdeki kısayolu ezberledim. Tek sorumluluğu olan, anlaşılır isimlendirilmiş küçük fonksiyonlar... Oh, mis gibi hava!
Büyü Bozma: "Magic Number" Laneti
Kodun içine serpiştirilmiş 86400, 3, 0.1 gibi sayılar görmek... StackOverflow'dan kopyala-yapıştır yaparken bıraktığımız lanetler bunlar. Meğerse sorun şuradaymış: 6 ay sonra koda baktığında "Bu 3 neyin 3'ü?" diye kendine küfrediyorsun. Şimdi kuralım: Direkt CONSTANT olarak tanımla ve AÇIKLAYICI bir isim ver.
Bir değişiklik yapman gerektiğinde, tüm kod tabanında 3'ü aramak yerine, tek bir sabiti değiştirmen yetiyor. Hayat kurtarıcı!
Temizlik Şart: "Lazy Class" & "Dead Code"
Bazen sırf "ileride belki lazım olur" diye yazdığımız, içinde iki property ve bir getter'dan başka bir şey olmayan class'lar... Ya da hiç çağrılmayan, testlerde bile kullanılmayan fonksiyonlar. Bunlar projede ölü ağırlık. Git log'larını karıştır, kimse kullanmıyorsa acımasız ol ve sil gitsin! Proje daha hafiflesin, zihnin daha ferah olsun.
Sonuç olarak, bu smell'leri temizlemek bir "mükemmeliyetçilik hastalığı" değil. Aksine, gelecekteki beni ve takım arkadaşlarımı korumak için bir öz bakım. Kod review'ü yaparken artık ilk baktığım şey logic hatalar değil, bu kokular oluyor. Siz de böyle takıntılar geliştirdiniz mi? Mesela deeply nested if'leri görünce eliniz mi kaşınıyor? Yoksa "Çalışıyor ya, bırak öyle dursun" mu diyorsunuz? Tartışalım!
Şaka gibi ama, bir fonksiyona bakıyorsun ve "Bu ne yapıyor acaba?" diye kendine soruyorsun. Cevap: "Her şeyi!". Şu kodu görünce içim daralıyor:
Python:
def process_user_data(data):
# Validasyonlar (20 satır)
# Veriyi temizleme (15 satır)
# DB'ye kaydet (10 satır)
# Loglama ve email atma (10 satır)
# Özel rapor üret (5 satır)
return result
Kodun içine serpiştirilmiş 86400, 3, 0.1 gibi sayılar görmek... StackOverflow'dan kopyala-yapıştır yaparken bıraktığımız lanetler bunlar. Meğerse sorun şuradaymış: 6 ay sonra koda baktığında "Bu 3 neyin 3'ü?" diye kendine küfrediyorsun. Şimdi kuralım: Direkt CONSTANT olarak tanımla ve AÇIKLAYICI bir isim ver.
JavaScript:
// ESKİ: if (user.status === 3) { ... }
// YENİ:
const USER_STATUS_ACTIVE = 3;
if (user.status === USER_STATUS_ACTIVE) { ... }
Bazen sırf "ileride belki lazım olur" diye yazdığımız, içinde iki property ve bir getter'dan başka bir şey olmayan class'lar... Ya da hiç çağrılmayan, testlerde bile kullanılmayan fonksiyonlar. Bunlar projede ölü ağırlık. Git log'larını karıştır, kimse kullanmıyorsa acımasız ol ve sil gitsin! Proje daha hafiflesin, zihnin daha ferah olsun.
Sonuç olarak, bu smell'leri temizlemek bir "mükemmeliyetçilik hastalığı" değil. Aksine, gelecekteki beni ve takım arkadaşlarımı korumak için bir öz bakım. Kod review'ü yaparken artık ilk baktığım şey logic hatalar değil, bu kokular oluyor. Siz de böyle takıntılar geliştirdiniz mi? Mesela deeply nested if'leri görünce eliniz mi kaşınıyor? Yoksa "Çalışıyor ya, bırak öyle dursun" mu diyorsunuz? Tartışalım!