Clean Code Nedir? Temiz Kod Yazmanın 10 Altın Kuralı
"Çalışan kod" yazmak kolaydır. "Okunabilir, bakımı yapılabilir ve sürdürülebilir kod" yazmak ise bir sanattır. Robert C. Martin'in (Uncle Bob) ünlü kitabı Clean Code, bu sanatın manifestosudur.
Temiz Kod Nedir?
Temiz kod, başka bir geliştiricinin (veya 6 ay sonraki kendinizin) kolayca okuyabildiği, anlayabildiği ve değiştirebildiği koddur.
"Herhangi bir aptal, bilgisayarın anlayacağı kodu yazabilir. İyi programcılar, insanların anlayacağı kodu yazar." — Martin Fowler
10 Altın Kural
1. Anlamlı İsimlendirme
Değişken, fonksiyon ve sınıf isimleri ne yaptıklarını açıkça belirtmelidir:
// ❌ Kötü
const d = new Date();
const arr = users.filter(u => u.a > 18);
// ✅ İyi
const currentDate = new Date();
const adultUsers = users.filter(user => user.age > 18);
2. Tek Sorumluluk (SRP)
Her fonksiyon, her sınıf tek bir iş yapmalıdır:
// ❌ Kötü — Birden fazla sorumluluk
function processOrder(order) {
validateOrder(order);
calculateTax(order);
chargeCreditCard(order);
sendEmail(order);
updateInventory(order);
}
// ✅ İyi — Her fonksiyon tek iş
function processOrder(order) {
const validatedOrder = validateOrder(order);
const taxedOrder = applyTax(validatedOrder);
const payment = processPayment(taxedOrder);
notifyCustomer(payment);
updateStock(taxedOrder);
}
3. Küçük Fonksiyonlar
Fonksiyonlar 20 satırı geçmemelidir. Uzun fonksiyonlar, alt fonksiyonlara bölünmelidir.
4. Yorum Yerine Kod
İyi kod kendini açıklar. Yorum, kodun neden yazıldığını anlatmalı, ne yaptığını değil:
// ❌ Kötü yorum
// Kullanıcının yaşını kontrol et
if (user.age >= 18) { ... }
// ✅ İyi — Kod kendini açıklıyor
if (user.isAdult()) { ... }
// ✅ İyi yorum — Neden'i açıklıyor
// Yasal gereklilik: KVKK gereği 18 yaş altı kullanıcılar
// ebeveyn onayı olmadan kayıt olamaz
if (!user.isAdult() && !user.hasParentalConsent()) { ... }
5. DRY (Don't Repeat Yourself)
Aynı kodu iki kere yazmayın. Tekrarlanan mantığı ortak fonksiyonlara çıkarın.
6. Hata Yönetimi
Hataları sessizce yutmayın. Anlamlı hata mesajları kullanın:
// ❌ Kötü
try { ... } catch(e) { console.log(e); }
// ✅ İyi
try {
const user = await findUser(userId);
if (!user) throw new UserNotFoundError(userId);
} catch (error) {
logger.error('Kullanıcı bulunamadı', { userId, error });
throw error;
}
7. Tutarlı Kod Stili
Proje genelinde tutarlı stil kullanın: indentation, naming convention, dosya yapısı. ESLint/Prettier gibi araçlarla otomatikleştirin.
8. Test Yazın
Test olmayan kod, güvenilmez koddur. Her fonksiyon için en az birim testi yazın:
describe('calculateDiscount', () => {
it('should apply 10% for orders over 100 TL', () => {
expect(calculateDiscount(150)).toBe(15);
});
it('should not apply discount for orders under 100 TL', () => {
expect(calculateDiscount(50)).toBe(0);
});
});
9. Erken Dönüş (Guard Clause)
İç içe if-else blokları yerine erken dönüş kullanın:
// ❌ Kötü — Arrow code
function getDiscount(user) {
if (user) {
if (user.isPremium) {
if (user.yearsActive > 2) {
return 0.2;
}
return 0.1;
}
return 0.05;
}
return 0;
}
// ✅ İyi — Guard clauses
function getDiscount(user) {
if (!user) return 0;
if (!user.isPremium) return 0.05;
if (user.yearsActive <= 2) return 0.1;
return 0.2;
}
10. Boy Scout Kuralı
"Kamp alanını bulduğunuzdan daha temiz bırakın." Her commit'te en az bir küçük iyileştirme yapın.
SOLID Prensipleri
| Prensip | Açıklama | |---------|----------| | Single Responsibility | Tek sorumluluk | | Open/Closed | Genişletmeye açık, değiştirmeye kapalı | | Liskov Substitution | Alt sınıf, üst sınıfın yerine geçebilmeli | | Interface Segregation | Küçük, odaklı arayüzler | | Dependency Inversion | Somut değil, soyut bağımlılık |
Sonuç
Temiz kod yazmak bir alışkanlıktır. Başlangıçta zaman alır, ama uzun vadede katlanarak geri döner. Okunabilir kod = daha az bug, daha hızlı geliştirme, daha mutlu ekip.
Clean Code ve SOLID prensiplerini interaktif görevlerle öğrenmek için LabLudus platformunun Foundation kariyer yolunu takip edin.