Bu oldukça genel bir sorudur. Fonksiyonel programlama, bir programın veriyi fonksiyonlar yoluyla dönüştürmek olduğu ve mutasyondan kaçınılması gerektiği fikrini (muhtemelen bir soyutlama birimi olarak görülen bir işlev dahilinde hariç) teşvik eder. İşlevsel stil JavaScript: argüman mutasyonundan kaçınmak için iyi bir uygulama?
Ancak bu programda
:function foo (bar) {
bar.k1 = "bananas";
return bar;
}
var o = { k1: "apples", k2: "oranges"};
var p = foo(o);
harici değişken O sonunda, o === p
(bunlar aynı nesneye referans), çubuk o için bir referans için foo içinde mutasyona uğramış, ve. Ancak işlevsel paradigma, p'nin yeni veriler olmasını bekler.
bariz çözüm argüman klonlamaktır (. E g kullanarak alt çizgi/lodash en _.clone
.):
function foo (_bar) {
var bar = _.clone(_bar);
bar.k1 = "bananas";
return bar;
}
Ama bu sorun hakkında düşünmek doğru yolu olup olmadığını merak ediyorum. FP perspektifinde, eğer mutasyona uğrayacaklarsa argüman olarak geçen nesneleri klonlamak için iyi bir uygulama olduğunu düşünür müsün? (Tüm nesnelerin kolayca klonlanamayacağını biliyorum, eğer olmasa da, basit vakalara sadık kalalım). Senin düşüncelerin?
Benim 2 kuruş, dil ile çalışan ve programlama tekniklerine asılmayan kod yazmaktır. İşlevsel programlama gayet iyi ve zeki, ancak yeni bir cisme ihtiyacınız yoksa, orijinali değiştirdiğinizde, bir tane iade etme sebebiniz yok. – adeneo
Bir şey yapmak istediğimde, nesneyi döndürmem gerekiyor: 'someOtherFunction (foo (o))'. Muhtemelen ne demek istediniz, bunun yeni bir nesne mi yoksa dışsal nesneye referans mı olduğu önemli değil. –
Önemli mi, yoksa size bağlı değil mi? Orijinal nesneyi değiştirmeden, yeni bir tane oluşturmak için bir neden yoksa, yalnızca değiştirildikten sonra işleve iletileni döndürün. – adeneo