Dart en 10 chapitres : Chap 8 Programmation Fonctionnelle.
Salut, j’espère que vous vous portez bien.
Lentement mais sûrement nous avançons vers la fin de notre cours. Si vous avez loupé la leçon précédente, trouvez la ici.
0. Vue d’ensemble
a. Qu’est-ce que la programmation fonctionnelle
b. Fonctions de première classe en Dart
c. Fonctions lambda en Dart
d. “Lexical closure” en Dart
e. Conclusion
1. Qu’est-ce que la Programmation Fonctionnelle
La programmation fonctionnelle (PF) est un paradigme de programmation qui met l’accent sur les fonctions et les expressions mathématiques pour construire des programmes.
Les grands concepts à retenir sous ce chapitre sont :
- Les fonctions pures : Les fonctions ne modifient pas l’état global et ne dépendent que de leurs arguments.
- La notion de l’immutabilité : Les données ne sont pas modifiées après leur création.
- La composition de fonctions : Les fonctions complexes sont créées en combinant des fonctions plus simples.
- La récursivité : Les fonctions s’appellent elles-mêmes pour résoudre des problèmes.
2. Fonctions de première classe
Les fonctions de première classe sont des fonctions qui acceptent d’autres fonctions, stockées dans des variables, passées en arguments (paramètres) et elles peuvent retourner une fonction.
Exemple d’un calcul de factorielle, la fonction retourner un calcul dans lequel se trouve encore cette même fonction.
int factorielle(int n) {
if (n == 0) {
return 1;
} else {
return n * factorielle(n - 1);
}
}
3. Fonctions lambda ou fonctions anonymes
Le langage Dart, précédemment vu, définit les fonctions avec un nom mais ici, nous verrons qu’il y a aussi la possibilité de définir des fonctions sans nom (anonyme). D’où ce nom des fonctions lambda ou anonymes.
Elles fonctionnent de la même manière que les fonctions normales et comprennent les mêmes caractéristiques (instructions, paramètres, …) sauf qu’elles ne portent pas un nom pour les définir.
Elles peuvent être stockées dans une variable et ainsi on peut accéder et récupérer leur valeur, d’où elles sont les mieux placées pour être passées en paramètre pour les fonctions de première classe.
Voyons cela dans un exemple :
//Fonction de la première classe ayant pour params une var et une fonction
void highFonction(String msg, Function secondFunction) {
print(msg);
secondFunction();
}
void main() {
//Variable stockant une fonction lambda d'affichage
dynamic affichage = () => print("Fonction secondaire");
//Variable stockant une fonction lambda de somme
Function somme = (int a, int b) {
print(a + b);
};
highFonction('Affichage simple', affichage);
print(somme(5, 2));
}
4. La “lexical closure” en Dart
En Dart, une “lexical closure” (fermeture lexicale) est une fonction qui peut accéder aux variables locales dans son environnement lexical au moment de sa création.
void main() {
int varLocale = 10;
void fonctionInterne() {
// Accède à la variable locale de main()
varLocale = 23;
print(varLocale);
}
fonctionInterne();
}
Constat : Dans cet exemple, la fonction fonctionInterne
peut accéder à la variable varLocale
de la fonction main
même après que main
a été terminée.
Cette notion est retrouvée en Flutter quand il s’agit de récupérer les gestes de l’utilisateur sur l’écran et faire de fermeture de clavier automatique ou de retour à la page principale (ex context.pop(), …).
5. Conclusion
Sous ce chapitre, il a été question de définir ce que c’est la programmation fonctionnelle et parcourir ses quelques concepts trouvés importants à connaître.
Merci et au prochain chapitre qui est pratiquement le dernier.
Portez-vous bien et n’oubliez pas : “Ne limitez pas vos rêves !”
😉