- Programmer avec des fonctions
- assigner une fonction à une variable
- passer une fonction comme paramètre
- retourner une fonction
- Lexical Closure (une fonction B dans une fonction A a accès aux variables de la fonction A)
- concept apparu pour la 1ère fois en ... JavaScript
- 👋 cf. 01-lexical-closure.js`
- ...
- Programmation fonctionnelle "pure" (le concept est mathématique)
- chaque fonction, pour la même entrée, retournera toujours la même sortie (c'est différent de nos "fonctions en code")
- 👋 cf.
02-pure-function.js
- 👋 cf.
- on diminue les effets de bord
- donc on fait disparaître pas mal de cas d'erreur (ce n'est pas toujours possible)
- chaque fonction, pour la même entrée, retournera toujours la même sortie (c'est différent de nos "fonctions en code")
Il est tout à fait possible d'approcher la pureté en JavaScript (#troll ?)
Le principe central de la programmation fonctionnelle est l'immutabilité
- Popularisée par la communauté Haskell
- La monade est maudite: une fois que vous avez cette révélation "ah mais oui c'est bien sûr", vous perdez la faculté de l'expliquer (Douglas Crockford - le meilleur "JavaScripteur" du monde)
à parcourir ensemble:
03-monades.js04-monades.js05-monades.js
- Ecrire une fonction addition (s'inspirer de
src/package00) - Ecrire une monade en Java (utiliser les génériques)
- compléter la classe
Monaddu packagefunctionalpour que:package01/Mains'exécutepackage02/Mains'exécute
- compléter la classe
ou comment éviter les null pointer exceptions
à parcourir ensemble:
package03package04
- Installer Kotlin (normalement il est "embarqué avec Intellij)
- Si vous n'utilisez pas Intellij:
- Langage pour la JVM
- Créé par JetBrain
- Kotlin == Java en mieux (troll?)
- Retenu par Google comme langage pour les applications Android
- ...
- Java ce n'est pas que Java
à parcourir ensemble:
01-functions.kt02-when.kt03-classes.kt04-data-classes-collections.kt
Compléter 03-kotlin-sandbox/src/05-kebab.kt
-
faire une data class
Ingredientavec 3 propriétés:val name: Stringvar price: Int =0val vegetarian: Boolean
-
créer une
Listd'IngredientappeléekebabPlateBasequi contiendra:- du
"pain"avec un prix=1(précisez si c'est végétarien ou pas) - de la
"salade"avec un prix=1 - des
"tomates"avec un prix=2 - des
"oignons"avec un prix=1
- du
-
créer une 2ème
List(kebabPlateCmd1) à partir dekebabPlateBaseen ajoutant:- du
"veau"avec un prix=4 - du
"riz"avec un prix=1 - des
"frites"avec un prix=2
- du
-
En 1 seule commande (plusieurs commandes chaînées) donnez le prix du Kebab
-
En 1 seule commande dites si le Kebab est végétarien (ou pas)
à parcourir ensemble: le code du module 04-arrow
la lib utilisée est https://arrow-kt.io/
- Utilisez
Trypout lire un fichier - Ulilisez la lib https://www.vavr.io/ pour faire pareil mais en Java (en utilisant
Try.of)