Last active
March 3, 2016 07:57
-
-
Save nicoespeon/b63732a037e973a94121 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Tu ne peux pas ne pas avoir d’effets de bord, sinon il ne se passe absolument rien. | |
* | |
* En revanche, la prog fonctionnelle préconise de limiter ça au maximum. | |
* | |
* Du coup c’est possible de le faire, mais généralement l’effet de bord qui log est isolé à un seul endroit (= une fonction impure). | |
* | |
* Il est assez simple de transformer une fonction impure en fonction pure : il suffit de l’englober dans une closure. | |
**/ | |
function impure$ () { | |
return document.querySelectorAll(selector); | |
} | |
var pure$ = function (selector) { | |
return function () { | |
return document.querySelectorAll(selector); | |
}; | |
} | |
/** | |
* `pure$('.myDiv')` retourne toujours le même résultat : une fonction qui va query `.myDiv`. | |
* | |
* L’idée en programmation fonctionnelle, c’est qu’on va travailler uniquement avec ce genre de choses | |
* (le monde des « types » dans la vidéo). | |
* | |
* Puis, tout à la fin, on va relâcher la bête : exécuter nos side effects (qui sont nécessaires). | |
* Mais cela se fait de manière isolé, la responsabilité étant sur celui qui appelle le code. | |
**/ | |
// On ne travaille qu’avec des concepts purs. | |
// var showOnScreen = … | |
// var markdown = … | |
// var pluck = … | |
var parseComment = compose(showOnScreen, markdown, pluck( "title" )); | |
// Exemple d’appel de code impur, qui sera probablement isolé dans main.js | |
parseComment( { id: 12, message: "This is *really* important!" } ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment