Êtes-vous prêt à renoncer à 90% de votre code actuel pour une nouvelle façon de programmer ?
Tout d’abord je dois vous parler de ma relation avec Javascript:
Mon quotidien avec Javascript (et php) commence en 2000 lorsque je conçoit mon premier site Web. A l’époque, Javascript était principalement utilisé pour des effets de hover sur les boutons ou encore pour contrôler les formulaires, quelques modifications du DOM et c’est tout même si c’était déjà pas mal pour l’époque !
L’évolution de Javascript était lente, rien à voir avec les bibliothèques JS d’aujourd’hui. Javascript était avant considéré comme un *extra*, du fine tuning.
Puis Jquery est arrivé pour apporter un vrai coup de frais au langage. La bibliothèque Sizzle qu’il intègre permettait de sélectionner facilement des éléments, certains ont poussé jQuery très loin pour produire de très belles interfaces utilisateur et des contenus dynamiques. Mais il y avait encore de nombreuses contraintes. Des contraintes qu’AngularJS ou React ont su contourner. Je vous passe ici les détails relatifs à la transpilation, le JSX,Typescript, ES7, ES8 et autres joyeusetés du monde JS de nos jours.
On a d’ailleurs un nouveau framework qui sort chaque matin. (/troll off)
Un Chemin semé d’embuches:
Quand Javascript a commencé à devenir plus mature en incorporant la programmation par objet, la création de classe, l’héritage … ,il m’a vraiment séduit et la je me suis dit qu’il allait vraiment devenir un VRAI langage !
Puis à l’usage, on s’aperçoit que par rapport à un langage comme le C++, le prototype de JS n’est pas vraiment un objet, il faut coder autrement, préfixer avec des underscores dans ses méthodes privées… Des console.log()
par ci, des console.log()
par la … Un ENFER ! car Javascript apportait effectivement les mêmes problématiques inhérentes à la programmation objet mais en plus, il en rajoutait une couche avec ses propres problématiques.
Et Javascript en programmation fonctionnelle ?
Voyant cette technique gagner en notoriété je me suis dis pourquoi pas test ? J’ai alors commencé à bouquiner des ouvrages gratuits dans le but de transposer ça en Javascript.
La courbe d’apprentissage est particulière, au début on ne comprends pas vraiment l’utilité car il y a des concepts pas forcement évident à comprendre, puis au fur et à mesure on s’aperçoit que l’on produit un code plus propre et plus évolutif.
Plus de VAR
Les var
deviennent des const
, pour obtenir un code immutable et pure, plus complexe car le typage est fort, mais plus efficace (cf le langage Swift ou les plus anciens comme Basic).
PLUS DE FOR
Il est plus utile de passer par des filter
, map
ou reduce
pour un gain de performance.
PLUS DE IF
Trop d’imbrication, tue l’imbrication ! L’empilage de if
successif peut vite conduire à une perte de lisibilité et de contrôle de votre code. Un simple opérateur ternaire doit suffire, penser votre logique autrement avant d’avoir des if
en cascade. Passer par exemple des fonctions plus basiques mais ré-utilisables.
GOODBYE LES SWITCH
Si on n’utilise plus de if
et de for
, il faut aussi oublier le swich
. Vous trouverez votre alternative dans Ramda’s et ses opérateurs conditionnels.
LE MEILLEUR : PLUS DE THIS
Incroyable non ? Le this
disparait complètement. En transformant votre application en web en data et en fonction, vous n’avez absolument plus besoin de this
. J’ai compris cela en interprétant un objet comme un état dynamique associé à des fonctions. Je n’avais pas besoin que ces états dynamiques et ses fonctions soient reliées à un objet, je les aient donc dissociés.
Ca peut vous paraître assez obscur mais si vous avez mis le nez dans la programmation fonctionnelle, vous verrez de quoi je parle, mais retenez que les Access Modifier (j’ai pas trouvé de traduction Française adéquate) vous permettront de contourner les problèmes inhérents à la programmation objet.
ET ENSUITE ?
Mon code JS est maintenant complètement différent, c’est un set de collection de fonction, organisé dans des modules ES6. J’utilise ses fonctions pour en créer des plus complexes tout en essayant de faire le moins de ligne possible en créant des fonctions d’une ligne qui return
directement une value.
Dorénavant ce point de vue différent me permet d’avoir une autre perspective face à un projet ou une problématique particulière. Je peux d’ailleurs appliquer ce point de vue sur d’autres langages.
Et vous ? Que pensez-vous de la programmation fonctionnelle ?