Kural
Şunu işlevleri kısa tutun.
Uzun işlevler zor zor anlaşması anlaşması, ve ve bakımı zor.
Desteklenen diller: 45+Giriş
Yüzlerce satırdan oluşan işlevler, birden fazla sorumluluğu bir araya getirir; bu da her satırı okumadan işlevin ne yaptığını anlamayı zorlaştırır. Uzun işlevler genellikle doğrulama, iş mantığı, veri dönüştürme ve hata işleme gibi birden fazla konuyu tek bir yerde ele alır. Bu durum, tek sorumluluk ilkesini ihlal eder ve mevcut davranışı bozmadan test edilmesi, hata ayıklanması ve değiştirilmesi zor bir kod ortaya çıkarır.
Neden önemli?
Kodun bakım kolaylığı: Uzun fonksiyonlar, geliştiricilerin davranışı anlayabilmeleri için kafalarında daha fazla bağlam bilgisi tutmalarını gerektirir. Tüm mantık birbiriyle iç içe olduğu için bir kısmı değiştirmek, başka bir kısmın bozulmasına yol açma riski taşır. İstenmeyen yan etkilerin öngörülmesi zor olduğundan, hata düzeltmeleri riskli hale gelir.
Test karmaşıklığı: 200 satırlık bir fonksiyonu test etmek, tek bir testte tüm olası kod yollarını kapsamayı gerektirir; bu da karmaşık bir kurulum ve çok sayıda test senaryosu gerektirir. Daha küçük fonksiyonlar ise odaklanmış birim testleriyle bağımsız olarak test edilebilir; bu da test takımlarını daha hızlı ve daha güvenilir hale getirir.
Kod örnekleri
❌ Uygun değil:
async function processOrder(orderData) {
if (!orderData.items?.length) throw new Error('Items required');
if (!orderData.customer?.email) throw new Error('Email required');
const subtotal = orderData.items.reduce((sum, item) =>
sum + (item.price * item.quantity), 0);
const tax = subtotal * 0.08;
const total = subtotal + tax + (subtotal > 50 ? 0 : 9.99);
const order = await db.orders.create({
customerId: orderData.customer.id,
total: total
});
await emailService.send(orderData.customer.email, `Order #${order.id}`);
await inventory.reserve(orderData.items);
return order;
}
Neden yanlış: Bu işlev, doğrulama, hesaplama, veritabanı işlemleri, e-posta ve envanter işlemlerini yürütür. Testler için tüm bağımlılıkların simülasyonu yapılması gerekir. Vergi mantığında veya doğrulama işlemlerinde yapılacak herhangi bir değişiklik, bu işlevin tamamının değiştirilmesini gerektirir.
✅ Uygunluk:
function validateOrder(orderData) {
if (!orderData.items?.length) throw new Error('Items required');
if (!orderData.customer?.email) throw new Error('Email required');
}
function calculateTotal(items) {
const subtotal = items.reduce((sum, item) =>
sum + (item.price * item.quantity), 0);
return subtotal + (subtotal * 0.08) + (subtotal > 50 ? 0 : 9.99);
}
async function createOrder(customerId, total) {
return await db.orders.create({ customerId, total });
}
async function processOrder(orderData) {
validateOrder(orderData);
const total = calculateTotal(orderData.items);
const order = await createOrder(orderData.customer.id, total);
// Non-critical operations in background
emailService.send(orderData.customer.email, `Order #${order.id}`).catch(console.error);
return order;
}Bunun önemi: Her fonksiyonun tek ve net bir sorumluluğu vardır. validateOrder() ve calculateTotal() mock'lar kullanılmadan bağımsız olarak test edilebilir. createOrder() veritabanı mantığını ayrı tutar. E-posta ve stok işlemleri sipariş oluşturulmasını engellemez ve hatalar ayrı olarak ele alınır.
Sonuç
API’leri kademeli değişikliklerle geliştirin: yeni alanlar ekleyin, yeni uç noktalar ekleyin, isteğe bağlı parametreler ekleyin. Geriye dönük uyumsuzluklar kaçınılmaz olduğunda, API sürümlemeyi kullanarak eski ve yeni sürümleri eşzamanlı olarak çalıştırın. Eski alanları kaldırmadan önce, net zaman çizelgeleri ve geçiş kılavuzları ile bu alanları kullanımdan kaldırılacağını bildirin.

