Refactoring
- Türkçe karşılığı
- yeniden düzenleme, kod iyileştirme
- Okunuşu
- rifektırıng
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Refactoring, mevcut kodun dışarıdan görünen davranışını değiştirmeden daha temiz ve bakımı kolay hâle getirmek için yeniden yapılandırılması sürecidir.
Refactoring nedir?
Refactoring, kodun dış davranışını aynen koruyarak iç tasarımını iyileştirmek demektir. Tipik örnekleri; anlaşılmaz değişkenleri yeniden adlandırmak, uzun bir fonksiyonu daha küçüklere bölmek, tekrarlanan kodu kaldırmak ve karmaşık koşulları sadeleştirmektir. Amaç, gelecekte okunması, test edilmesi ve değiştirilmesi daha kolay bir koddur.
Refactoring küçük ve güvenli adımlarla yapılır ve onu güvenli kılan şey otomatik testlerdir: hiçbir şeyin bozulmadığını doğrulamak için her değişiklikten önce ve sonra testleri çalıştırırsınız. Birçok kod editörü, sembolü yeniden adlandırma ya da fonksiyon çıkarma gibi, tüm referansları otomatik güncelleyen yerleşik refactoring araçları sunar.
İyi bir benzetme mutfağı yeniden düzenlemektir: eşyaları daha uygun yerlere taşır, çekmeceleri etiketlersiniz ama yine aynı yemekleri pişirirsiniz. Geliştiriciler çoğunlukla değişikliği kolaylaştırmak için bir özellik eklemeden hemen önce ya da temizlik için hemen sonra refactoring yapar. Refactoring, ekiplerin teknik borcu ödemesinin de başlıca yoludur.
Refactoring, baştan yazmaktan farklıdır. Baştan yazma mevcut kodu atıp yeniden inşa eder; bu yavaş ve risklidir. Refactoring ise kodu kademeli olarak değiştirir ve boyunca çalışır durumda tutar. Davranışı bilerek değiştirdikleri için hata düzeltmekten ya da özellik eklemekten de farklıdır.
Önemli noktalar
- Refactoring kodun davranışını değil, yapısını değiştirir.
- Küçük adımlarla ilerleyin ve her adımdan sonra testleri çalıştırın.
- Yaygın refactoring işlemleri arasında yeniden adlandırma, fonksiyon çıkarma ve tekrarı kaldırma bulunur.
- Teknik borcu azaltmanın başlıca aracıdır.
Örnek
// Before: unclear names, magic numbers, and duplicated logic
function calc(o) {
if (o.type === "vip") return o.total - o.total * 0.2;
return o.total - o.total * 0.05;
}
// After: same behavior, clearer names, no duplication
const VIP_DISCOUNT = 0.2;
const REGULAR_DISCOUNT = 0.05;
function calculateFinalPrice(order) {
const rate = order.type === "vip" ? VIP_DISCOUNT : REGULAR_DISCOUNT;
return order.total - order.total * rate;
}Sık sorulan sorular
Refactoring ile baştan yazma arasındaki fark nedir?
Refactoring mevcut kodu, çalışır durumda tutarak küçük adımlarla iyileştirir; baştan yazma ise kodu yeni bir uygulamayla değiştirir. Yazılım çalışmaya devam ettiği ve her değişiklikten sonra test edilebildiği için refactoring genellikle daha düşük risklidir.
Kod ne zaman refactor edilmeli?
İyi zamanlar; değiştirilmesi zor bir koda özellik eklemeden hemen önce, bir özellik çalışır hâle geldikten hemen sonra ve kod incelemesi sırasıdır. Davranışın aynı kaldığını kolayca doğrulayamayacağınız için testsiz büyük refactoring'lerden kaçının.
Refactoring işlevselliği değiştirir mi?
Hayır. Tanım gereği refactoring dış davranışı aynı tutar; davranış değişiyorsa bu bir refactoring değil, hata düzeltmesi ya da yeni bir özelliktir.
İlgili sayfalar
- Teknik BorçYazılım Mimarisi, s. 43Teknik borç, daha uzun sürecek daha iyi bir yaklaşım yerine şimdi hızlı ya da sınırlı bir çözüm seçilmesiyle doğan, gelecekteki ek iş maliyetidir.
- SOLIDYazılım Mimarisi, s. 39SOLID, geliştiricilerin daha anlaşılır, genişletilebilir, test edilebilir ve bakımı kolay kod yazmasına yardım eden beş nesne yönelimli tasarım ilkesidir.
- Tasarım DeseniYazılım Mimarisi, s. 42Tasarım deseni, yazılım tasarımında sık görülen bir soruna kanıtlanmış, yeniden kullanılabilir çözümdür; hazır kod değil, genel bir şablon olarak anlatılır.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- Pull RequestSürüm Kontrolü, s. 32Pull request, bir branch'teki değişiklikleri başka bir branch'e birleştirme önerisidir; kod birleşmeden önce ekibe inceleme, tartışma ve test alanı sunar.
- DRYYazılım Mimarisi, s. 13DRY, her bilgi ya da mantık parçasının çoğaltılmak yerine tek bir yetkili temsile sahip olması gerektiğini söyleyen bir yazılım tasarım ilkesidir.
- Code SmellEkipler ve Süreç, s. 6Code smell (kod kokusu), kod hâlâ çalışsa bile çoğu zaman daha derin bir tasarım sorununa işaret eden yüzeysel bir belirtidir.
- Strangler Fig DeseniYazılım Mimarisi, s. 40Strangler fig deseni, eski bir sistemi özellikleri tek tek yeni koda yönlendirerek, eski sistem kapatılana kadar adım adım değiştirme yöntemidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin