Ben şahsen çeşitli programlama dilleri tarafından sunulan "referans ile geçmek" işlevselliğini sevmiyorum. Belki de sadece fonksiyonel programlama kavramlarını keşfediyorum, ancak yan etkilere neden olan fonksiyonları gördüğümde (referansla geçirilen parametreleri değiştirmek gibi) her zaman tüylerim diken diken oluyor. Ben şahsen "tek sorumluluk" ilkesini benimsiyorum.
IMHO, bir işlev return anahtar sözcüğünü kullanarak yalnızca bir sonuç / değer döndürmelidir. Bir parametre / bağımsız değişkeni değiştirmek yerine, sadece değiştirilmiş parametre / bağımsız değişken değerini döndürür ve istenen yeniden atamaları çağrı koduna bırakırım.
Ancak bazen (umarım çok nadiren), aynı işlevden iki veya daha fazla sonuç değeri döndürmek gerekir. Bu durumda, elde edilen tüm değerleri tek bir yapıya veya nesneye dahil etmeyi tercih ederim. Yine, yeniden atamaların işlenmesi çağrı koduna kadar olmalıdır.
Misal:
Değişken parametrelerinin, argüman listesinde 'ref' gibi özel bir anahtar kelime kullanılarak destekleneceğini varsayalım. Kodum şöyle görünebilir:
//The Function
function doSomething(ref value) {
value = "Bar";
}
//The Calling Code
var value = "Foo";
doSomething(value);
console.log(value); //Bar
Bunun yerine, aslında böyle bir şey yapmayı tercih ederim:
//The Function
function doSomething(value) {
value = "Bar";
return value;
}
//The Calling Code:
var value = "Foo";
value = doSomething(value); //Reassignment
console.log(value); //Bar
Birden çok değer döndüren bir işlev yazmak gerektiğinde, ben de başvuru tarafından geçirilen parametreleri kullanmazsınız. Yani böyle kodu önlemek:
//The Function
function doSomething(ref value) {
value = "Bar";
//Do other work
var otherValue = "Something else";
return otherValue;
}
//The Calling Code
var value = "Foo";
var otherValue = doSomething(value);
console.log(value); //Bar
console.log(otherValue); //Something else
Bunun yerine, aslında bir nesnenin içindeki her iki yeni değeri de bu şekilde döndürmeyi tercih ederim:
//The Function
function doSomething(value) {
value = "Bar";
//Do more work
var otherValue = "Something else";
return {
value: value,
otherValue: otherValue
};
}
//The Calling Code:
var value = "Foo";
var result = doSomething(value);
value = result.value; //Reassignment
console.log(value); //Bar
console.log(result.otherValue);
Bu kod örnekleri oldukça basitleştirilmiştir, ancak kabaca bu tür şeyleri nasıl ele alacağımı kabaca gösterir. Çeşitli sorumlulukları doğru yerde tutmama yardımcı oluyor.
Mutlu kodlama. :)