Temiz Kod: Okunabilir, Bakımı Kolay ve Güvenilir Yazılım
Yazılım geliştirmede en büyük zorluklardan biri, çalışan kod yazmak değil — okunabilir, anlaşılır ve bakımı kolay kod yazmaktır. Robert C. Martin'in ünlü kitabı "Clean Code"da belirttiği gibi: "Herhangi bir aptal, bilgisayarın anlayacağı kodu yazabilir. İyi programcılar, insanların anlayacağı kodu yazar."
Temiz Kod Nedir?
Temiz kod; okunaklı, iyi organize edilmiş, amacı açık, gereksiz tekrardan arınmış ve kolayca değiştirilebilen koddur. Temiz kod yazmak sadece bir stil tercihi değil, profesyonel bir sorumluluktur.
Temiz Kodun Temel Özellikleri
- Okunduğunda ne yaptığı hemen anlaşılır
- İsimlendirmeler açıklayıcı ve tutarlıdır
- Fonksiyonlar küçük ve tek bir iş yapar
- Tekrar eden kod yoktur (DRY prensibi)
- Test edilmiştir ve test edilebilir yapıdadır
- Minimum bağımlılığa sahiptir
SOLID Prensipleri
S — Tek Sorumluluk Prensibi (Single Responsibility)
Her sınıf veya modül yalnızca bir sorumluluğa sahip olmalıdır. Bir sınıfın değişmesi için yalnızca bir neden olmalıdır.
O — Açık/Kapalı Prensibi (Open/Closed)
Yazılım varlıkları genişlemeye açık, değişikliğe kapalı olmalıdır. Yeni davranışlar mevcut kodu değiştirmeden eklenebilmelidir.
L — Liskov Yerine Koyma Prensibi (Liskov Substitution)
Alt sınıflar, üst sınıfların yerine sorunsuz şekilde kullanılabilmelidir.
I — Arayüz Ayrımı Prensibi (Interface Segregation)
İstemciler kullanmadıkları arayüzlere bağımlı olmaya zorlanmamalıdır.
D — Bağımlılık Tersine Çevirme (Dependency Inversion)
Yüksek seviyeli modüller, düşük seviyeli modüllere bağımlı olmamalıdır. Her ikisi de soyutlamalara bağımlı olmalıdır.
Anlamlı İsimlendirme
Kod okunabilirliğinin en önemli unsuru isimlendirmedir. İyi isimler, kodun amacını açıkça ifade eder.
İsimlendirme Kuralları
- Niyet belirten isimler kullanın:
dyerineelapsedTimeInDays - Yanlış bilgi vermekten kaçının: Bir liste değilse
accountListdemeyin - Anlamlı ayrımlar yapın:
dataveinfoarasında fark yoksa ikisinden birini kullanın - Telaffuz edilebilir isimler seçin:
genymdhmsyerinegenerationTimestamp - Aranabilir isimler kullanın: Tek harfli değişkenlerden kaçının
Fonksiyon Tasarımı
Küçük Tutun
Fonksiyonlar 20-30 satırı geçmemelidir. Uzun fonksiyonlar, birden fazla iş yapan fonksiyonlardır ve bölünmeleri gerekir.
Tek Bir İş Yapın
Her fonksiyon yalnızca bir iş yapmalıdır. Eğer bir fonksiyonu tarif ederken "ve" kelimesini kullanıyorsanız, birden fazla iş yapıyor demektir.
Parametre Sayısını Minimize Edin
İdeal fonksiyon sıfır parametrelidir (niladik). Bir (monadik) veya iki (diadik) parametre kabul edilebilir. Üçten fazla parametre neredeyse her zaman bir nesneye sarılmalıdır.
Yan Etkilerden Kaçının
Fonksiyonlar söylediklerini yapmalı, gizli işlemler gerçekleştirmemelidir.
Refactoring: Kodun Sürekli İyileştirilmesi
Refactoring, kodun dış davranışını değiştirmeden iç yapısını iyileştirme sürecidir.
Ne Zaman Refactoring Yapılmalı?
- Aynı kod üç kez tekrar ettiğinde (Rule of Three)
- Fonksiyon çok uzun olduğunda
- Sınıf çok fazla sorumluluk taşıdığında
- İsimlendirmeler artık amacı yansıtmadığında
- Yeni özellik eklemek zorlaştığında
Yaygın Refactoring Teknikleri
- Metod Çıkarma: Uzun fonksiyonlardan mantıksal bölümleri ayırma
- Değişken Yeniden Adlandırma: Daha açıklayıcı isimler verme
- Koşul İfadelerini Sadeleştirme: Karmaşık if-else yapılarını basitleştirme
- Nesne Oluşturma: İlişkili verileri bir nesne altında toplama
Kod Kokuları (Code Smells)
| Kod Kokusu | Belirtisi | Çözüm |
|---|---|---|
| Uzun Metod | Fonksiyon 30+ satır | Metod çıkarma |
| Tanrı Sınıfı | Bir sınıf her şeyi yapıyor | Sorumluluk ayırma |
| Tekrarlayan Kod | Aynı mantık birden fazla yerde | DRY prensibi uygulama |
| Sihirli Sayılar | Açıklanmamış sabitler | Anlamlı sabit tanımlama |
| Ölü Kod | Kullanılmayan kod parçaları | Temizleme ve silme |
| Aşırı Yorum | Kodu açıklamak için çok fazla yorum | Kodu kendini açıklayacak şekilde yeniden yazma |
Test Edilebilir Kod Yazma
Temiz kod, test edilebilir koddur. Test edilebilir kod yazmak için:
- Bağımlılıkları enjekte edin (Dependency Injection)
- Global durumdan kaçının
- Fonksiyonları saf (pure) tutun
- Soyutlamaları kullanarak mock'lanabilir yapılar oluşturun
Sonuç
Temiz kod yazma, sürekli pratik ve bilinçli çaba gerektiren bir beceridir. SOLID prensipleri, anlamlı isimlendirme, küçük fonksiyonlar ve düzenli refactoring ile kodunuzun kalitesini dramatik şekilde artırabilirsiniz. Ekolsoft olarak, temiz kod kültürünü benimseyen yazılım ekipleri ile sürdürülebilir ve ölçeklenebilir projeler geliştiriyoruz.