Programlama Dillerinde Kod Refaktoring Teknikleri
Kod refaktoring (refactoring), yazılımın işlevselliğini değiştirmeden iç yapısını yeniden düzenleme sürecidir. Bu teknik, kodun okunabilirliğini artırmayı, bakımını kolaylaştırmayı ve yazılımın uzun vadeli sürdürülebilirliğini sağlamayı amaçlar. Refaktoring, kötü kokan (code smell) kodları ortadan kaldırmak ve yazılımın teknik borcunu azaltmak için en etkili yöntemlerden biridir.
Refaktoring Neden Gereklidir?
Zamanla genişleyen projelerde kod karmaşıklaşır, tutarsızlaşır ve hata üretmeye daha yatkın hale gelir. Refaktoring:
- Kod tekrarlarını azaltır.
- Anlamlı isimlendirme sağlar.
- Modülerlik kazandırır.
- Yazılım mimarisini sadeleştirir.
- Hataları daha kolay tespit edilebilir hale getirir.
İyi bir refaktoring süreci, kodun davranışını değiştirmez; yalnızca yapısını iyileştirir.
Yaygın Refaktoring Teknikleri
1. Extract Method (Metot Ayırma)
Uzun bir fonksiyon veya metodun parçalarını, ayrı işlevsel metodlara bölerek okunabilirliği artırma tekniğidir.
# Öncesi
def hesapla():
# uzun işlem
vergi = gelir * 0.18
gider = vergi + masraf
net = gelir - gider
# Sonrası
def hesapla():
vergi = vergi_hesapla(gelir)
gider = gider_hesapla(vergi, masraf)
return gelir - gider
2. Rename Variable/Method (İsimlendirme İyileştirmesi)
Anlam ifade etmeyen değişken ve fonksiyon adlarını açıklayıcı hale getirme işlemidir.
int a = get(); // kötü örnek
int vergiOrani = vergiOraniGetir(); // iyi örnek
3. Inline Method (Metot İçeriğini Yerleştirme)
Yalnızca tek bir yerde kullanılan basit metodları, çağrıldığı yere yerleştirerek kodu sadeleştirme.
# Öncesi
def vergiyi_hesapla():
return gelir * 0.18
vergi = vergiyi_hesapla()
# Sonrası
vergi = gelir * 0.18
4. Replace Magic Number with Named Constant
Sihirli sayıları (magic numbers) sabitlerle değiştirerek kodun anlamını artırma tekniğidir.
// Kötü
double faiz = miktar * 0.18;
// İyi
const double KDV_ORANI = 0.18;
double faiz = miktar * KDV_ORANI;
5. Encapsulate Field
Bir alanı doğrudan erişimden koruyup getter/setter metodları ile kapsülleme işlemidir.
// Öncesi
public int yas;
// Sonrası
private int yas;
public int getYas() { return yas; }
public void setYas(int y) { yas = y; }
6. Replace Conditional with Polymorphism
Karmaşık koşullu ifadeleri polimorfizm ile değiştirerek kodun genişletilebilirliğini artırma tekniğidir.
// Kötü
if (personel.tipi.equals("Muhendis")) {
maas = hesaplaMuhendisMaasi();
} else if (personel.tipi.equals("Teknisyen")) {
maas = hesaplaTeknisyenMaasi();
}
// İyi
abstract class Personel {
abstract double maasHesapla();
}
Kod Kokan Yapılar (Code Smells)
Kod refaktoring tekniklerinin uygulanmasında ilk adım, kokan kodları (code smells) tespit etmektir. Bunlar:
- Duplicate Code (Tekrarlayan Kod)
- Long Method (Uzun Metotlar)
- Large Class (Şişmiş Sınıflar)
- Feature Envy (Başka sınıfın verisini fazla kullanma)
- Data Clumps (Birlikte gezen veri grupları)
- Switch Statements (Yinelenen koşul blokları)
Bu kokuların çoğu, küçük ve hedefe yönelik refaktoringlerle giderilebilir.
Refaktoring Süreci Nasıl Uygulanır?
- Test Kapsamı Oluşturun: Refaktoring sonrası davranış değişikliği olmaması için birim testleri şarttır.
- Kademeli Refaktoring Yapın: Tüm projeyi aynı anda değiştirmeyin.
- Versiyon Kontrolü Kullanın: Hatalı refaktoringler geri alınabilmelidir.
- Kod İnceleme (Code Review) Süreci Uygulayın: Diğer geliştiricilerin gözlemleriyle hataları azaltın.
- Statik Kod Analizi Araçları Kullanın: SonarQube, ReSharper, ESLint gibi araçlarla kötü yapılar tespit edilebilir.
Programlama Dillerine Göre Refaktoring Araçları
Dil | Popüler Refaktoring Araçları |
---|---|
Java | IntelliJ IDEA, Eclipse, SonarLint |
Python | PyCharm, pylint, Rope |
C# | Visual Studio, Resharper |
JavaScript | VS Code, ESLint, Prettier |
C++ | CLion, Visual Assist, Cppcheck |
Go | GoLand, gofmt, staticcheck |
Rust | rust-analyzer, Clippy |
Bu makale bilgilendirme amaçlıdır. Büyük ölçekli kod refaktoring süreçlerine başlamadan önce deneyimli bir yazılım mühendisi veya yazılım mimarına danışmanız tavsiye edilir.
Anahtar kelimeler: kod refaktoring, code refactoring, yazılım mimarisi, kod kokuları, extract method, polymorphism, inline method, magic number, rename variable, kod iyileştirme teknikleri, yazılım geliştirme teknik borç, test ile refaktoring, static code analysis