Je suis relativement nouveau dans la programmation fonctionnelle et dans les librairies telles que ramda.js mais une chose que j'ai trouvée très utile est la possibilité d'exécuter des fonctions.Fonctions au trait: comment les optimiser
Utilisation des fonctions cari j'écris très souvent des choses comme
suivantesconst myFun = R.curry(
(arg1, arg2) => {
let calculated = anotherFun(arg1)
//do something with calculated and arg2
return calculated * 5 + arg2
}
)
const anotherFun = (arg) => {
console.log("calling anotherFun");
return arg + 1
}
var partial = myFun(1)
console.log(partial(2))
console.log(partial(3))
<script src="//cdn.jsdelivr.net/ramda/0.22.1/ramda.min.js"></script>
mais clairement dans cette situation anotherFun
est appelée à chaque fois que j'appelle partial
même si arg1
et en conséquence calculated
sont toujours les mêmes.
Existe-t-il un moyen d'optimiser ce comportement et d'appeler anotherFun
uniquement lorsque ses arguments changent?
La seule façon qui traverse mon esprit est ce
const myFun = R.curry(
(calculated, arg2) => {
return calculated * 5 + arg2
}
)
const anotherFun = (arg) => {
console.log("calling anotherFun");
return arg + 1
}
var calculated = anotherFun(1)
var partial = myFun(calculated)
console.log(partial(2))
console.log(partial(3))
<script src="//cdn.jsdelivr.net/ramda/0.22.1/ramda.min.js"></script>
mais de cette façon, je dois changer les arguments passés à myfun et cela complique l'API externe