Kod refactoring nasıl yapılır sorusunun kısa yanıtı şudur: davranışı değiştirmeden kodu okunabilir, sürdürülebilir ve verimli hale getirmek. Pek çok geliştirici refactoring'i "eski kodu yeniden yazmak" olarak algılar; oysa asıl amaç, testlerin geçmeye devam ettiğinden emin olarak iç yapıyı adım adım iyileştirmektir. **Refactoring için doğru an ne zaman?** - Aynı kodu üçüncü kez kopyaladığınızda (DRY: Don't Repeat Yourself) - Bir fonksiyon 20 satırı geçtiğinde ve birden fazla iş yaptığında - Bir değişken veya fonksiyon adını okuyunca ne yaptığını anlayamadığınızda - Yeni bir özellik eklemek için önce kodu anlamaya çalışmak çok vakit aldığında **Ön koşullar** - Refactor etmeden önce mevcut davranışı kapsayan testler olmalı (yoksa önce testleri yazın) - Versiyon kontrolü kullanıyor olun (git commit ile güvenli başlangıç noktası oluşturun) **Adım 1: Küçük adımlar atın ve her adımda test çalıştırın** Kod refactoring nasıl yapılır sorusunun en kritik yanıtı budur: büyük toplu değişiklik yapmayın. Tek bir değişiklik yapın, testi çalıştırın, geçiyorsa bir sonraki değişikliğe geçin. Bu disiplin, nerede hata yaptığınızı net olarak görmenizi sağlar. **Adım 2: Değişken ve fonksiyon adlarını düzeltin** Adlandırma, en kolay ve en etkili refactoring türüdür: ```python # Kötü def f(x, y): return x * y * 0.18 # İyi def kdv_hesapla(fiyat, miktar): KDV_ORANI = 0.18 return fiyat * miktar * KDV_ORANI ``` Adı değiştirirken IDE'nin "Yeniden Adlandır" (Rename) özelliğini kullanın; bu, tüm kullanım yerlerini otomatik günceller. **Adım 3: Tekrar eden kodu fonksiyona çıkarın (Extract Function)** Aynı kod bloğu birden fazla yerde görünüyorsa ortak bir fonksiyon oluşturun: ```python # Öncesi, tekrar eden doğrulama def urun_ekle(ad, fiyat): if not ad or len(ad) < 2: raise ValueError("Geçersiz ad") # ... devamı def urun_guncelle(id, ad, fiyat): if not ad or len(ad) < 2: raise ValueError("Geçersiz ad") # ... devamı # Sonrası def ad_dogrula(ad): if not ad or len(ad) < 2: raise ValueError("Geçersiz ad") def urun_ekle(ad, fiyat): ad_dogrula(ad) # ... devamı def urun_guncelle(id, ad, fiyat): ad_dogrula(ad) # ... devamı ``` **Adım 4: Uzun fonksiyonları parçalara bölün (Single Responsibility)** Bir fonksiyon tek bir iş yapmalıdır. "ve" kelimesiyle açıklayabileceğiniz fonksiyonlar bölünmeye adaydır: ```python # Kötü: veriyi çek VE işle VE kaydet def veri_isle(url): # 50 satır kod... # İyi def veri_cek(url): ... def veriyi_donustur(ham_veri): ... def sonucu_kaydet(sonuc): ... def veri_isle(url): ham = veri_cek(url) islenmus = veriyi_donustur(ham) sonucu_kaydet(islenmus) ``` **Adım 5: Sihirli sayıları sabitlere dönüştürün** Kod içindeki sayısal değerler ("sihirli sayılar") kodu anlaşılmaz kılar: ```python # Kötü if kullanici_yasi < 18: ... # İyi ASGARI_YAS = 18 if kullanici_yasi < ASGARI_YAS: ... ``` **Adım 6: Son kontrolü yapın** Kod refactoring nasıl yapılır sorusunun son adımı doğrulamadır: tüm testlerin geçtiğini, kodun eskisi kadar çalıştığını ve yeni eklediğiniz hiçbir şeyin davranışı değiştirmediğini teyit edin. **Yaygın hatalar** - Refactoring sırasında yeni özellik eklemek: İkisini aynı anda yapmayın; önce refactor, sonra yeni özellik. - Test yazmadan refactor etmek: Testler olmadan hangi adımın kodu bozduğunu bilemezsiniz. - Aşırı mühendislik: Her şeyi mükemmel yapmaya çalışmak yerine yeterince iyi yapmayı hedefleyin.