La programmation fonctionnelle avec Scala

L'approche fonctionnelle

Pour mieux présenter le paradigme fonctionnel nous commencerons par un rappel sur le paradigme impératif. C'est le paradigme des premiers langages informatiques. Il reste le paradigme le plus courant aujourd'hui et est présent dans de nombreux langages : C/C++, C#, Pascal, Java, perl…

Rappel sur la programmation impérative

La programmation impérative s'appuie sur le modèle des machines à états. Chaque opération est décomposée en séquences d'instructions exécutées par l'ordinateur pour modifier l'état de la mémoire. Modifier la mémoire revient à modifier «la machine programme».
La logique impérative établie souvent une correspondance entre le code haut niveau et les instructions processeurs ou le matériel. Ainsi on observe les correspondances suivantes :

Cette correspondance tend à limiter nos abstractions en structures conceptielles qui puissent être décomposées instruction par instruction.
Des 1978 John Backus, créateur du Fortran, regrette ces limitations et dit : «Can programmaing be liberated from the von Neumann Style»

Remarque : Le paradigme objet est souvent abordé en suivant l'angle de fonctionnement du paradigme impératif. Mais il est tout autant compatible avec l'approche fonctionnelle.

Historique

Si le paradigme fonctionnel est un monde nouveau pour beaucoup de développeurs son histoire a presque un siècle.
Toute la théorie repose sur celle du lambda-calcul inventée en 1930 par Alonzo Church. Le lambda-calcul est un système formel qui fonde les concepts de fonction et d'application. Pour le lambda calcul «tout est fonction». L'opération de base est une application : on applique une fonction à des valeurs. Puisque tout est fonctions ces valeurs sont elles même des fonctions.
Partant de cette théorie de nombreux langages fonctionnels sont créés, dont:

Avantages

Nous l'avons vue dans ce bref historique la programmation fonctionnelle a intéressé des grands noms de l'industrie. Grâce à ses nombreux avantages que nous allons aborder ici.
Le paradigme fonctionnel a pour caractéristique : l'absence de «variables» au sens propres. Il existe des valeurs, ou identifiant, correspondant aux constantes des langages impératifs mais aucune variable modifiable. Cette caractéristique induit plusieurs avantages :

Par ailleurs la programmation fonctionnelle permet une écriture souvent concise et élégante.
Enfin c'est une autre approche. Connaître plusieurs paradigmes aide à avoir ou garder un esprit souple capable d'envisager une problématique sous plusieurs angles.
Remarque : Scala étant multi-paradigme il existe des variables modifiables et non modifiables dites mutables et immutables.
Les variables mutables sont déclarées avec le mots clef var, les immutables avec le mot clef val.

Inconvénients

Un bon dessin valant mieux qu'un long discours cette image représente bien l'inconvénient majeur de la programmation fonctionnelle: c'est une approche nouvelle parfois bizarre et «peu naturelle».

Si la programmation fonctionnelle permet d'écrire de manière concise cela ouvre la porte à l'écriture absconde car trop concise.