Aikido

Daha anlaşılır kodlar için bir fonksiyonun amacını neden kendi kendine açık hale getirmelisiniz

Okunabilirlik

Kural
Bir fonksiyonun amacını kendiliğinden anlaşılır hale getirin.
Fonksiyon isimleri, okuyucuların kodun içeriğini incelemesine
gerek kalmadan ne yaptığını açıkça belli etmelidir.

Desteklenen diller: 45+

Giriş

Amacını açık etmeyen fonksiyon isimleri, geliştiricileri davranışı anlayabilmek için tüm kod tabanını okumaya mecbur bırakır. Şöyle adlandırılmış bir fonksiyon: process() veya handle() her şeyi yapıyor olabilir ve gerçek amacını çıkarabilmek zihinsel çaba gerektirir. Buna karşın, aşağıdaki gibi açık ve açıklayıcı isimler validateUserEmail() veya calculateOrderTotal() niyeti hemen belli ederek kodun kendi kendini belgelemesini sağlar.

Neden önemli?

Kodun sürdürülebilirliği: Net olmayan fonksiyon isimleri anlama sürecini yavaşlatır. Geliştiriciler iş mantığına odaklanmak yerine, fonksiyonların ne yaptığını anlamak için kodları okumakla vakit kaybederler. Bu durum, aylarca sonra koda geri dönüldüğünde veya ekibe yeni üyeler katıldığında daha da belirginleşir.

Yanlış kullanım: Belirsiz fonksiyon isimleri, yanlış kullanım olasılığını artırır. Örneğin, update() adında bir fonksiyon; doğrulama, dönüştürme, kalıcı hale getirme (persist) ya da bildirim gönderme işlemlerinden herhangi birini yapıyor olabilir. İsmi davranışını tam olarak belirtmediği için geliştiriciler onu yanlış amaçla kullanabilir. Net isimler, kısıtlamaları ve yan etkileri (side effects) belgelendirerek yanlış kullanımların önüne geçer.

Kod örnekleri

❌ Kural dışı:

function process(data) {
    const result = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(result);
    notifyService.send(result);
    return result;
}

Neden yanlış: İsim, process() verilere ne olduğu hakkında hiçbir ipucu vermez. Okuyucular öğeleri dönüştürdüğünü, veritabanına kaydettiğini ve bildirim gönderdiğini öğrenmek için kodu incelemek zorunda kalır. Fonksiyonun yan etkileri ve sorumlulukları gizlenmiş olur.

✅ Kurallara uygun:

function markItemsAsProcessedAndSave(data) {
    const processedItems = data.map(item => ({
        ...item,
        processed: true,
        timestamp: Date.now()
    }));
    db.save(processedItems);
    notifyService.send(processedItems);
    return processedItems;
}

Neden önemli?: İsim, fonksiyonun öğeleri işlenmiş olarak işaretlediğini ve kaydettiğini açıkça belirtir. Okuyucular, kodu okumak zorunda kalmadan fonksiyonun temel amacını anında kavrar. İsim, yan etkilere dair ipuçları vererek (veritabanına kaydetme gibi) doğru beklentiler oluşturur.

Sonuç

Fonksiyon isimleri, kod incelemesi gerektirmeden "bu ne yapıyor?" sorusuna yanıt vermelidir. Eylemleri açıklayan fiiller ve hedefleri açıklayan isimler kullanın. Bir isim çok uzuyorsa, büyük ihtimalle fonksiyon çok fazla iş yapıyor demektir ve bölünmelidir.

Sık Sorulan Sorular

Sorularınız mı var?

Fonksiyon adları ne kadar uzun olabilir?

Net olmaları için gerektiği kadar uzun olabilir. calculateTotalPriceWithTaxAndShipping(), calc()'den daha iyidir. Modern IDE'lerde otomatik tamamlama özelliği bulunduğundan, daha uzun adları yazmak kolaydır. Kısalıktan ziyade netliğe öncelik verin. Bir ad 5-6 kelimeyi aşıyorsa, fonksiyon çok fazla sorumluluk üstleniyor olabilir.

Fonksiyon adları uygulama detaylarını içermeli mi?

Hayır, uygulamayı değil davranışı ve niyeti tanımlayın. Fonksiyonları nasıl yaptıklarıyla değil, ne başardıklarıyla adlandırın. sortUsersByName(), quickSortUsers()'dan daha iyidir. Uygulama detayları değişebilir, ancak amaç sabit kalır. Bu, yeniden yapılandırma (refactoring) sırasında adların geçerliliğini korumasını sağlar.

Yardımcı (helper) veya araç (utility) fonksiyonları ne olacak?

Onların da net adlara ihtiyacı vardır. helper() veya util() yerine, formatCurrency() veya validateEmail() gibi spesifik adlar kullanın. Spesifik bir ad bulamıyorsanız, fonksiyonun amacı belirsiz olabilir ve daha iyi tanımlanması gerekebilir.

Birden fazla iş yapan fonksiyonları nasıl adlandırmalıyım?

Onları bölün. validateAndTransformAndSave() gibi adlar gerektiren fonksiyonlar tek sorumluluk ilkesini ihlal eder. Ayrı fonksiyonlar oluşturun: validate(), transform(), save(). İşlemlerin birlikte gerçekleşmesi gerekiyorsa, iş akışını açıklayan bir ada sahip bir düzenleyici (orchestrator) fonksiyon kullanın: processUserRegistration().

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.