funKTionale - Functional constructs for Kotlin
Un excellent post sur la théorie des catégories et la distinction entre Monade et Monoïde du point de vue des langages de programmation.
Pour Chlouchloutte
Définition
Le currying de fonction est la décomposition d'une fonction à n paramètres en n fonctions à 1 paramètre.
Prenons un exemple :
// A) Vous écrivez :
val result:Int = add(1, 2, 3) // result = 6
// B) Vous souhaitez écrire :
val result:Int = add(1)(2)(3) // result = 6
Passer de A à B, c'est la currification ou currying en anglais. L'opération inverse s'appelle la décurification.
Remarque :
Dans l'exemple (B), add(1) retourne une fonction qui une fois exécutée avec le paramètre 2 retourne une autre fonction qui prendra le paramètre 3.
Comme pour certains termes financiers, je posterai quelques définitions sur les lambdas.
Prédicat :
=> Fonction qui retourne un booléen.
Les prédicats sont très utilisés dans les filtres, par exemple vous souhaitez parcourir une collection et ne retourner dans une liste que les personnes étant majeures, alors vous créerez une lambda prenant en paramètre une personne et qui retournera true si celle-ci est majeure ou false sinon.
Exemple :
-
Prédicat sans paramètres :
( ) -> true
-
Prédicat sans paramètres mais où l'on spécifie explicitement le return (qui est facultatif en PF) :
( ) -> { return true; }
-
Prédicat avec un paramètre et le return :
(person) -> { return person.isMale(); }
-
Prédicat avec deux paramètres :
(persA, persB) -> { Object.equals(persA, persB); }
-
Prédicat avec deux paramètres, le return et dont on spécifie le type des paramètres :
(Person persA, Person persB) -> { return Object.equals(persA, persB); }
Je poursuis ma migration vers le fonctionnel sur Java 8 avec un petit tuto sur les stream et les map-reduce. Le tout est guidé par une multitude de petits exemples simples.
Je découvre le blog de Jean-Christophe Gay. Très sympa et assez complet sur Java 8.
Attention : si vous ne vous êtes toujours pas mis aux lambdas, aux Clojures et aux Predicats, vous allez avoir du mal à vous revendre dans l'univers Java. Début 2016, cela deviendra indispensable !
P.S : vous savez que je déteste la programmation fonctionnelle car l'inférence de type permet de produire bien trop souvent un code immaintenable, cependant, utilisée avec BEAUCOUP de parcimonie, elle permet de factoriser énormément de code technique et éviter les doublons. Bref, je m'y suis mise, ce n'est pas pour rien.
Vu que je suis obligée de faire de la programmation fonctionnelle (avec inférence de type, ce que je déteste au plus haut point), je vais poster une série de tutos à ce sujet.