Kural
Dosya içindeki bariz tekrarı
ortadan kaldırın. Tekrarlanan kod blokları
bakım yükünü ve tutarsız güncellemeler riskini artırır.
Desteklenen diller: 45+Giriş
Tek bir dosya içinde kopyala-yapıştır yapılmış kod, zamanla biriken bakım kabuslarına yol açar. Aynı mantık birden fazla yerde yer aldığında, hata düzeltmeleri ve özellik güncellemelerinin her bir noktaya uygulanması gerekir. Geliştiriciler kaçınılmaz olarak bu kopyalardan birini gözden kaçırır ve aynı işlemin hangi kod yolunun çalıştığına bağlı olarak farklı sonuçlar ürettiği tutarsız davranışlara neden olur. Bu tutarsızlığın hata ayıklaması zordur, çünkü tekrarlanan mantık ilk bakışta aynı görünür ve farklılıklar ancak dikkatli bir karşılaştırma sonucunda ortaya çıkar.
Neden önemli?
Hata yayılımı: Tekrarlanan kodda bir hata bulunduğunda, bunu tek bir yerde düzeltmek her yerde düzeltildiği anlamına gelmez. Geliştiriciler, kopyaların başka yerlerde de olduğunu fark etmeden yalnızca ilkini düzeltir ve hatanın farklı koşullar altında aktif kalmasına neden olur.
Bakım yükü: Her tekrarlanan blok, bakım maliyetini iki katına çıkarır. Mantığı değiştirmek, her bir kopyanın bulunmasını ve güncellenmesini gerektirir; dosyalar büyüdükçe kopyaları takip etmek daha da zorlaşır.
Kod örnekleri
❌ Kural dışı:
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ı tekrarlanmıştır. Vergi oranı değişirse veya doğrulamanın geliştirilmesi gerekirse, her iki yöntemin de güncellenmesi gerekir. Bir geliştirici vergi hesaplamasını bir yöntem içinde güncelleyip diğerini unutabilir ve bu da tutarsız fiyatlandırmaya yol açabilir.
✅ Kurallara uygun:
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 };
}
}Neden önemli: Doğrulama, hesaplama ve vergi mantığı tek birer yöntemde merkezi olarak toplanmıştır. Vergi oranını değiştirmek, dosya içindeki kopyaları aramak yerine tek bir yöntemi değiştirmek anlamına gelir. Her yardımcı (helper) yöntem bağımsız olarak test edilebilir ve her iki sipariş türü de herhangi bir iyileştirmeyi veya hata düzeltmesini otomatik olarak devralır.
Sonuç
Dosya içi tekrar genellikle düzeltilmesi en kolay olanıdır ve anında fayda sağlar. Deseni fark eder etmez tekrarlanan mantığı yardımcı fonksiyonlara veya metotlara ayırın. Üçleme kuralı (rule of three), bir kod üç kez göründüğünde yeniden yapılandırma (refactor) zamanının geldiğini gösterir. Tekrarın tüm dosyaya yayılmasını beklemeyin.

