Kural
Ortadan kaldır bariz dosya içi yinelemeleri ortadan kaldırın.
Yinelenen kod bloklar artırır bakım
yükünü ve bu risk tutarsızlık tutarsız güncelleme
Desteklenen diller: 45+Giriş
Tek bir dosya içinde kopyalanıp yapıştırılan kod, zamanla daha da ağırlaşan bakım kabuslarına yol açar. Aynı mantık birden fazla yerde göründüğünde, hata düzeltmeleri ve özellik güncellemeleri her bir örneğe ayrı ayrı uygulanmalıdır. Geliştiriciler kaçınılmaz olarak yinelenen kodlardan birini gözden kaçırır; bu da, hangi kod yolunun yürütüldüğüne bağlı olarak aynı işlemin farklı sonuçlar vermesine yol açan tutarsız davranışlara neden olur. Yinelenen mantık ilk bakışta aynı göründüğü ve farklılıklar ancak dikkatli bir karşılaştırma sonrasında ortaya çıktığı için, bu tutarsızlığın hata ayıklaması zordur.
Neden önemli?
Hata yayılması: Yinelenen kodda bir hata bulunduğunda, bu hatayı tek bir yerde düzeltmek, her yerde düzeltilmesini sağlamaz. Geliştiriciler, başka yerlerde de kopyalarının olduğunu fark etmeden ilk örneği düzeltir ve bu da hatanın farklı koşullarda devam etmesine neden olur.
Bakım yükü: Her yinelenen blok, bakım maliyetini iki katına çıkarır. Mantığın değiştirilmesi, her bir kopyanın bulunup güncellenmesini gerektirir ve dosyalar büyüdükçe yinelenenleri takip etmek daha da zorlaşır.
Kod örnekleri
❌ Uygun değil:
class OrderProcessor {
async processStandardOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('Order must have items');
}
const total = order.items.reduce((sum, item) =>
sum + (item.price * item.quantity), 0);
const tax = total * 0.08;
const finalAmount = total + tax;
return { total: finalAmount, tax };
}
async processExpressOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('Order must have items');
}
const total = order.items.reduce((sum, item) =>
sum + (item.price * item.quantity), 0);
const tax = total * 0.08;
const expressfee = 15.99;
const finalAmount = total + tax + expressFee;
return { total: finalAmount, tax, expressFee };
}
}Neden yanlış: Doğrulama mantığı ve toplam hesaplaması iki kez yazılmış. Vergi oranı değişirse veya doğrulama sürecinde iyileştirme gerekirse, her iki yöntem de güncellenmelidir. Bir geliştirici, vergi hesaplamasını bir yöntemde güncelleyebilir ancak diğerini unutabilir; bu da fiyatlandırmada tutarsızlığa yol açar.
✅ Uygunluk:
class OrderProcessor {
validateOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('Order must have items');
}
}
calculateSubtotal(items) {
return items.reduce((sum, item) =>
sum + (item.price * item.quantity), 0);
}
calculateTax(amount) {
return amount * 0.08;
}
async processStandardOrder(order) {
this.validateOrder(order);
const subtotal = this.calculateSubtotal(order.items);
const tax = this.calculateTax(subtotal);
return { total: subtotal + tax, tax };
}
async processExpressOrder(order) {
this.validateOrder(order);
const subtotal = this.calculateSubtotal(order.items);
const tax = this.calculateTax(subtotal);
const expressFee = 15.99;
return { total: subtotal + tax + expressFee, tax, expressFee };
}
}Bunun önemi: Doğrulama, hesaplama ve vergi mantığı tek bir yöntemde merkezileştirilmiştir. Vergi oranını değiştirmek, dosyada yinelenen kısımları tek tek aramak yerine tek bir yöntemi değiştirmek anlamına gelir. Her yardımcı yöntem bağımsız olarak test edilebilir ve her iki sipariş türü de yapılan iyileştirmeleri veya hata düzeltmelerini otomatik olarak devralır.
Sonuç
Aynı dosya içindeki tekrarlanan kodlar genellikle düzeltmesi en kolay olanlardır ve anında fayda sağlar. Bu kalıbı fark eder etmez, tekrarlanan mantığı yardımcı işlevlere veya yöntemlere ayırın. “Üç kuralı”, bir kod üç kez tekrarlandığında yeniden düzenleme zamanının geldiğini belirtir. Tekrarlanan kodun dosyanın tamamına yayılmasını beklemeyin, sorunu hemen çözün.

