Aikido

İşlev argümanlarını neden geçersiz kılmamalısınız: karışıklığı önlemek ve hata ayıklama sorunlarını önlemek

Okunabilirlik

Kural

Yapma gerekenden işlev değiştirmeyin.
İşlev fonksiyon değişkenleri karışıklığa çağıranları
çağıranları ve hata hata ayıklamayı zorlaştırır.

Desteklenen diller: 45+

Giriş

İşlev parametrelerinin yeniden atanması, işlev içindeki argümanların değerini değiştirir ve bu da parametrenin herhangi bir anda hangi değeri barındırdığının belirsiz kalmasına neden olur. Hata ayıklama sırasında, bir parametrenin hâlâ çağıran tarafından geçirilen değeri içerdiğine güvenemezsiniz. Bu durum, kodu okuyan herkes için kafa karışıklığına yol açar ve parametrenin değeri yürütme süresince değiştiği için hataların izini sürmeyi zorlaştırır.

Kod örnekleri

❌ Uygun değil:

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ış: Şu kullanıcı Parametreye birden fazla kez yeni değer atanır; bu da fonksiyonun tamamını okumadan asıl çağıranın neyi ilettiğini anlamayı imkansız hale getirir. Hata ayıklama sırasında gerçek girdi değil, değiştirilmiş değerler gösterilir; bu da sorunların kaynağına kadar izini sürmeyi zorlaştırır.

✅ Uygunluk:

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;
}

Bunun önemi: Yeni değişkenler (currentUser, işlenmişKullanıcı) ara değerler içerirken, orijinal kullanıcı parametre değişmeden kalır. Hata ayıklayıcılar gerçek girdi değerini gösterir ve kod, adlandırılmış değişkenler aracılığıyla dönüşümleri net bir şekilde izler.

Sonuç

Dönüşümler için parametreleri yeniden atamak yerine yeni değişkenler kullanın. Bu, veri akışını açık hale getirir ve hata ayıklama amacıyla orijinal girdiyi korur. Ekstra değişken tanımlamalarının getirdiği hafif ayrıntı fazlalığı, okunabilirlik ve hata ayıklama kolaylığındaki artışla telafi edilir.

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.