IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Func' programming - un blog homéopathique

Première dose

Noter ce billet
par , 25/03/2015 à 12h43 (985 Affichages)
Introduction
NDLA: Le titre de ce blog est un clin d’œil au blog de François (s’il me permet de l’appeler par son prénom), Reac’ programming, qui m’a donné l’envie d’en commencer un à mon tour.

J’ai trouvé, lorsque je me suis intéressé à la programmation fonctionnelle il y a quelques mois de cela, une documentation abondante : en particulier, pour chaque langage fonctionnel, des tutoriels très bien faits. Mais il sont le plus souvent en anglais, plutôt massifs, parfois obscurs, se répètent entre eux et je voudrais plutôt présenter la programmation fonctionnelle par dose homéopathique en m’appuyant sur différents langages, pour la rendre plus agréable d’accès, et plus funky.

Qu’est-ce que la programmation fonctionnelle ?
La programmation fonctionnelle, essentiellement, est un paradigme de programmation dans lequel on ne manipule pas des variables et des instructions, mais des fonctions. Si vous y croisez une variable ou même une valeur littérale, il faut l’envisager comme une fonction sans argument qui retourne toujours la même valeur, par exemple :

Code c : Sélectionner tout - Visualiser dans une fenêtre à part
int x = 0 ;  // <=> int x() { return 0 } ;

La première conséquence, la plus étonnante aussi pour les habitués de la programmation impérative, c’est qu’on ne peut pas modifier la valeur d’une variable :

Code c : Sélectionner tout - Visualiser dans une fenêtre à part
x = x + 1 ; // <=> x() = x() + 1 ;  gloups…

La seconde conséquence, c’est que le programme n’est plus un flux d’instructions, où l’on passe d’un état à un autre en fonction de ces instructions. Le programme devient plutôt une liste d’équations qui sont simultanément vraies. Pour prendre l’exemple de l’instruction canonique « if then » :

Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// où l’on voit bien qu’évaluer isOdd ne renvoie pas la même valeur selon l’état du programme
int x = 3;
bool isOdd = false ; // état n° 1
if ( x % 2 == 1) isOdd = true ; // état n° 2

<=>

Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
// où l’on voit bien qu’évaluer isOdd retournera toujours la même valeur
int x() { return 3 ; }
bool isOdd () { if ( x() % 2 == 1 ) return true ; else return false ; }

Pourquoi la programmation fonctionnelle ?
A ce stade, vous sentez bien que toutes vos habitudes héritées de la programmation impérative seraient chamboulées en adoptant un paradigme fonctionnel. Alors pourquoi changer ? La programmation fonctionnelle apporte de nombreux avantages : les programmes sont plus faciles à tester, puisqu’ils sont constitués de fonctions qui renvoient toujours la même valeur, et qu’il n’y a plus une succession d’états à tester (attendez, quelle est la valeur de cette variable à ce moment-là déjà ?) ; il est plus facile de les paralléliser (pour les mêmes raisons) ; mais surtout, si vous cherchez un nouveau défi, une nouvelle jeunesse dans votre vie de programmeur, la programmation fonctionnelle est faite pour vous.
J’ajoute que, comme tous les langages rajoutent des aspects fonctionnels à leur standard en ce moment, comme C++ ou Java, c’est un détour intéressant même pour ceux qui ne souhaitent pas perdre leur productivité sur leur langage de prédilection.

Quel langage pour la programmation fonctionnelle ?
Vaste choix. On peut faire de la programmation fonctionnelle en C ou bien dans un langage purement fonctionnel, comme Haskell. On peut en faire dans un langage mixte, comme à leurs façons respectives LISP ou Scala. On peut écrire tout ou partie d’un programme dans un style fonctionnel. On peut écrire un programme dans des langages interopérables, certains fonctionnels, d’autre non, comme Java et Clojure qui sont compilés pour la JVM et peuvent faire appel l’un à l’autre de façon transparente.
Dans ce blog je ne m’interdirai aucun langage, au contraire.

Exercices :
1) rappelez-vous quelques uns des bugs que vous avez rencontrés parce que vous vous mépreniez sur l’état d’une variable (variable non initialisée, variable incrémentée au mauvais endroit de la boucle, variable partagée entre des threads, etc.)
2) énumérez quelques techniques de programmation impérative qui ne seront plus possibles si vous adoptez un style fonctionnel
3) jetez un œil aux articles de Wikipedia de quelques langages fonctionnels (Haskell, Ocaml , Scala, Clojure, Scheme, Erlang…)

Envoyer le billet « Première dose » dans le blog Viadeo Envoyer le billet « Première dose » dans le blog Twitter Envoyer le billet « Première dose » dans le blog Google Envoyer le billet « Première dose » dans le blog Facebook Envoyer le billet « Première dose » dans le blog Digg Envoyer le billet « Première dose » dans le blog Delicious Envoyer le billet « Première dose » dans le blog MySpace Envoyer le billet « Première dose » dans le blog Yahoo

Mis à jour 24/04/2016 à 20h53 par LittleWhite (Coloration code)

Catégories
Sans catégorie

Commentaires