Fonctionnel
Progression
#Fonctionnel
À quoi ça sert ?
À quoi ça sert: écrire des transformations claires et testables en limitant les effets de bord. Comment: fonctions pures, immutabilité, composition et usage mesuré de map/filter/reduce; comprendre le coût mémoire et les gains de lisibilité.
Objectifs d’apprentissage
- Favoriser fonctions pures et immutabilité; réduire les effets de bord.
- Utiliser map/filter/reduce/comprehensions avec parcimonie et lisibilité.
- Appliquer la composition de fonctions et les closures pour structurer le code.
#Exemple (map/filter/reduce en Python)
Chargement de l’éditeur...
Purs vs impurs: viser des fonctions déterministes sans effets de bord, pour tester et composer.
#Pièges fréquents
- Abus de lambda/magie: préférer des fonctions nommées et claires.
- Copier des structures immuables volumineuses à chaque étape: mesurer et amortir (persistence structurelle si dispo).
- Mélanger styles: effets de bord (logs, I/O) dans du code supposé pur.
#Mini‑quiz
Une fonction « pure » signifie:
#Exercice : Pipeline de traitement de données
Implémentez une pipeline de traitement de données en utilisant des fonctions pures et la composition pour transformer une liste de dictionnaires représentant des utilisateurs.
#Instructions
- Créez des fonctions pures pour chaque étape de transformation :
filter_adults(users)
: Filtrer les utilisateurs de 18 ans et plus.normalize_names(users)
: Normaliser les noms (capitaliser la première lettre).add_age_group(users)
: Ajouter un groupe d'âge ('young', 'adult', 'senior').sort_by_name(users)
: Trier par nom.
- Implémentez une fonction
compose
pour composer plusieurs fonctions en une seule. - Appliquez la pipeline à une liste d'utilisateurs.
#Exemple de code
pythonpython
1def filter_adults(users):2 return [user for user in users if user['age'] >= 18]3 4def normalize_names(users):5 return [{'name': user['name'].capitalize(), 'age': user['age']} for user in users]6 7def add_age_group(users):8 def get_age_group(age):9 if age < 30:10 return 'young'11 elif age < 60:12 return 'adult'13 else:14 return 'senior'
Chargement de l’éditeur...