Skip to content

Instantly share code, notes, and snippets.

@nicoespeon
Last active March 3, 2016 07:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicoespeon/b63732a037e973a94121 to your computer and use it in GitHub Desktop.
Save nicoespeon/b63732a037e973a94121 to your computer and use it in GitHub Desktop.
/**
* 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