La programmation fonctionnelle avec Scala

L'évaluation retardée

L'évaluation retardée (ou évaluation différée), est une méthode d'évaluation des expressions par un programme. Elle est parfois abusivement appelée évaluation paresseuse par abus de traduction de l'anglais «lazy evaluation» (lazy n'a pas la connotation négative de paresseux en Français).

Définition : Technique de programmation où le programme n'exécute pas le code avant que les résultats de ce code ne soient réellement nécessaires.

Elle évite donc le calcul d'un résultat si celui-ci n'est finalement pas utilisé. Elle permet également de réutiliser le résultat d'un calcul déjà effectué.
Scala étant multiparadigme son évaluation est stricte par défaut (valeurs évaluées à leur déclaration) comme dans un langage impératif classique. L'évaluation retardée est possible en scala avec «lazy».

Pour bien comprendre son fonctionnement je vous propose d'étudier le code suivant

On observe 3 affectations utilisant 3 fonctions anonymes qui avant de retourner leurs valeurs affichent un message.

Ce code affiche donc xzyz.


fonctions déterministes

Précédemment nous avons abordé la récursivité terminale. Nous abordons ici une autre bonne pratique de la programmation fonctionnelle : les fonctions déterministes.
Définition : Une fonction déterministe retourne toujours la même valeur pourvu qu'on lui fournisse les même paramètres.
Donc les fonctions interagissant avec l'utilisateur, ou utilisant des données-système qui peuvent varier (l'heure par exemple) ne sont pas déterministes. La bonne pratique veut que ce type de données soit également passé en paramètre.

Les fonctions déterministes ont plusieurs avantages :