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: d yerine elapsedDays; boolean'lar isActive, 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

SmellBelirtiÇözüm
Long method100+ satırlık fonksiyonExtract method
God classHer şeyi yapan Manager sınıfıSorumluluklara bölme
Duplicate codeKopyala-yapıştır bloklarOrtak fonksiyon
Long parameter list6+ parametreParametre nesnesi
Magic numbersif (status == 3)İsimli sabit veya enum
Feature envyMetot başka sınıfın verisiyle uğraşıyorMetodu o sınıfa taşıma
Primitive obsessionPara için float, e-posta için düz strDeğer nesnesi (Money)
Derin iç içe if'lerOk şeklinde kodGuard clause, erken dönüş
Shotgun surgeryTek 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).

  1. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  2. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  3. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.
  6. Interface ile abstract class arasındaki fark nedir?KolayOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle