Clean code nedir? Yaygın code smell'ler nelerdir?
Cevap
Clean code, başkasının (ve altı ay sonraki sizin) kolayca okuyup güvenle değiştirebileceği koddur. Kod bir kez yazılır, defalarca okunur.
Temel ilkeler
- Anlamlı isimler:
dyerineelapsedDays; boolean'larisActive,hasPermission. - Küçük ve tek işi yapan fonksiyonlar, az parametre.
- DRY: bilginin tek bir kaynağı olsun; ama erken soyutlamadan da kaçının.
- KISS ve YAGNI: gerekmeyeni yazmayın.
- Yorum "ne"yi değil "neden"i açıklamalı; kod kendini açıklamalı.
- Hatalar sessizce yutulmamalı.
Yaygın code smell'ler
| Smell | Belirti | Çözüm |
|---|---|---|
| Long method | 100+ satırlık fonksiyon | Extract method |
| God class | Her şeyi yapan Manager sınıfı | Sorumluluklara bölme |
| Duplicate code | Kopyala-yapıştır bloklar | Ortak fonksiyon |
| Long parameter list | 6+ parametre | Parametre nesnesi |
| Magic numbers | if (status == 3) | İsimli sabit veya enum |
| Feature envy | Metot başka sınıfın verisiyle uğraşıyor | Metodu o sınıfa taşıma |
| Primitive obsession | Para için float, e-posta için düz str | Değer nesnesi (Money) |
| Derin iç içe if'ler | Ok şeklinde kod | Guard clause, erken dönüş |
| Shotgun surgery | Tek değişiklik için 10 dosyaya dokunma | İlgili mantığı bir araya toplama |
# Önce
def process(u):
if u is not None:
if u.active:
if u.balance > 0:
charge(u)
# Sonra: guard clause
def charge_active_user(user):
if user is None or not user.active:
return
if user.balance <= 0:
return
charge(user)Refactoring testlerle güvenceye alınarak, küçük adımlarla yapılmalıdır ("izci kuralı": dokunduğunuz kodu bulduğunuzdan biraz daha temiz bırakın).
İlgili OOP & Tasarım Desenleri soruları
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
- Interface ile abstract class arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.