Aikido

Fonksiyon argümanlarını neden ezmemelisiniz: kafa karışıklığını önlemek ve hata ayıklama sorunlarını çözmek

Okunabilirlik

Kural

Fonksiyon argümanlarını ezmeyin (override etmeyin).
Fonksiyon parametrelerine yeniden değer atamak,
çağıranları şaşırtabilir ve hata ayıklamayı zorlaştırabilir.

Desteklenen diller: 45+

Giriş

Fonksiyon parametrelerine yeniden değer atanması, fonksiyon içerisindeki argümanların değerini değiştirerek parametrenin herhangi bir andaki değerinin ne olduğunu belirsiz hale getirir. Hata ayıklama (debugging) sırasında, bir parametrenin çağıran tarafın aktardığı değeri koruduğuna güvenemezsiniz. Bu durum, kodu okuyan herkes için kafa karışıklığı yaratır ve parametrenin değeri yürütme boyunca değiştiği için hataların izini sürmeyi zorlaştırır.

Kod örnekleri

❌ Kural dışı:

function processUser(user) {
    if (!user) {
        user = { id: null, name: 'Guest' };
    }

    user = { ...user, processedAt: Date.now() };

    if (user.age < 18) {
        user = { ...user, restricted: true };
    }

    return user;
}

Neden yanlış: The user parametresine birden fazla kez yeniden değer atanır, bu da tüm fonksiyonu okumadan orijinal çağrıcının ne ilettiğini bilmeyi imkansız hale getirir. Hata ayıklama, gerçek girdiyi değil değiştirilmiş değerleri gösterir, bu da sorunları kaynağına kadar takip etmeyi zorlaştırır.

✅ Kurallara uygun:

function processUser(user) {
    const currentUser = user || { id: null, name: 'Guest' };

    const processedUser = {
        ...currentUser,
        processedAt: Date.now()
    };

    if (currentUser.age < 18) {
        return { ...processedUser, restricted: true };
    }

    return processedUser;
}

Neden önemli: Yeni değişkenler (currentUser, processedUser) ara değerleri tutarken orijinal user parametre değişmeden kalır. Hata ayıklayıcılar gerçek girdi değerini gösterir ve kod, dönüşümleri adlandırılmış değişkenler aracılığıyla net bir şekilde takip eder.

Sonuç

Parametrelere yeniden değer atamak yerine dönüşümler için yeni değişkenler kullanın. Bu, veri akışını açık hale getirir ve hata ayıklama için orijinal girdiyi korur. Ek değişken bildirimlerinin hafif ayrıntı düzeyi (verbosity), artan okunabilirlik ve hata ayıklanabilirlik tarafından fazlasıyla dengelenir.

Sık Sorulan Sorular

Sorularınız mı var?

Peki ya varsayılan parametre değerleri?

Varsayılan parametreler (process(user = {})) yeniden atamadan farklıdır. Bunlar, yalnızca argümanlar tanımlanmamış olduğunda değer sağlar; mevcut parametreleri yeniden atamaz. İsteğe bağlı argümanlar için varsayılan parametreleri kullanın, ancak bunları işlev gövdesi içinde yeniden atamayın.

Bu durum, ilkel parametreler ile nesne parametreleri arasında da geçerli mi?

Evet, her ikisi de. Temel verilerin (sayılar, dizeler) yeniden atanması yerel referansı değiştirir ve kafa karışıklığına yol açar. Nesnelerin yeniden atanması ise referansı tamamen değiştirir; ancak nesne özelliklerinin değiştirilmesi (user.name = 'x') değişmezlikle ilgili ayrı bir konudur.

Ya girdileri normalleştirmem veya temizlemem gerekirse?

Normalleştirilmiş değer için yeni bir değişken oluşturun: const cleanedInput = normalizeInput(input). Bu, fonksiyonun girdiyi dönüştürdüğünü açıkça ortaya koyar ve hata ayıklama sırasında hem orijinal hem de temizlenmiş değerleri gösterir.

Peki ya parametre özelliklerini değiştirmeye ne dersiniz?

Özellikleri değiştirmek (user.name = 'x') ile parametrenin kendisini yeniden atamak farklı şeylerdir. Bununla birlikte, parametreleri değiştirmek de yan etkiler yarattığı için sorunludur. Parametreleri değiştirilemez olarak ele almayı ve değişiklikleri içeren yeni nesneler döndürmeyi tercih edin.

Ş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.