Programmation
Fonctionnelle avec Kotlin
DevCon #15 - 3 Nov 2022 - 100% Kotlin
DEVCON#15
3-XI-2022
Riadh MNASRI
DEVCON#15 : MERCI À NOS PARTENAIRES !
PLAN
Qui suis-je ?
C’est quoi une fonction pure ?
Transparence référentielle
Immutabilité
Les fonctions d’ordre supérieur
Kotlin et la programmation fonctionnelle
Pourquoi Arrow-KT ?
C’est quoi une monade ?
Option
Either
Validated
Monoid
Folder une liste
Live Coding/Demo
Conclusion
Qui suis-je ?
Riadh MNASRI
Tech lead / Dev senior passionné
Adepte des pratiques crafts
Je m’intéresse au clean code, programmation fonctionnelle, …
J’aime apprendre et partager mes connaissances
Me contacter sur Linkedin/Twitter (@riadhmnasri)
C’est quoi une fonction pure ?
Retourne toujours le même résultat pour les mêmes
arguments
Doit retourner toujours un résultat
Ne fait pas d’effet de bord (Faire un changement en
dehors de la fonction)
Avantages des fonctions pures
Facile à tester
Facile à comprendre (pas de dépendance cachée ni effet de
bord)
Moins de risque de bugs
Transparence référentielle
Capacité d’une expression ou d’une fonction d’être
remplacée par le résultat de son évaluation sans changer
le résultat d’un programme.
Immutabilité
Un objet est immutable si on ne peut plus changer son
état une fois déclaré
Thread safe/Parallélisme
Pas d’effets de bords cachés
Les fonctions d’ordre supérieur
Est traitée par le compilateur comme n’importe quelle
variable
On peut la passer comme argument, la retourner par une
fonction et l’assigner à une variable
Kotlin et la programmation
fonctionnelle
Immutabilité (val, séparation des collections mutables/lecture, …)
Les fonctions sont d’ordre supérieur
Les classes ‘sealed’
Pattern Matching (expressions when)
Fonctions d’extensions
…
Pourquoi Arrow-KT ?
Pourquoi Arrow-KT ?
Kotlin fournit les outils pour faire la programmation
fonctionnelle
Kotlin n’est pas un langage fonctionnel pur
Arrow.Kt: Librairie fournit des interfaces et des
abstractions de la programmation fonctionnelle.
Implémente les types de données (Either, …) Les types de
classes (Monades, …)
C’est quoi une Monade ?
Functor: un type qui dé
fi
nit comment transformer son
contenu (dé
fi
nit une fonction map() )
Monade: est un functor qui dé
fi
nit une fonction
fl
atMap
Option
Kotlin ne contient pas le mot clé Option
Arrow.kt l’enrichit avec ce type de donné
Either
Permet d’éviter de lancer des exceptions
Garder le contrôle
Représenter les échecs et les exceptions comme valeur du retour
Validated / NonEmptyList
Ressemble à Either
Permet de cumuler plusieurs exceptions
Monad Comprehension
Ecrire du code dans un style séquentiel, un enchainement
d’actions imbriqués
Un style linéaire facile à lire
Similaire aux coroutines/async-wait
Une Monoide 1/2
Notion mathématique: algèbre générale
C’est une structure algébrique
Un ensemble muni d’une loi de composition interne
associative
Dé
fi
nit un élément neutre
Une Monoide 2/2
Une Monoide - Folder une Liste
Permettre de faire des opérations sur une liste
Une fonction pour combiner les éléments de la liste avec
une valeur initiale
Demo/Live Coding
Demo/Live Coding
Code disponible sur mon GitHub (riadh-mnasri)
https:/
/github.com/riadh-mnasri/functional-
programming-with-kotlin-arrowkt
Conclusion
Kotlin fournit tout ce qu’il faut pour faire la
programmation fonctionnelle.
Arrow-KT se base sur la puissance de Kotlin pour fournir
des abstractions/implémentations qui facilite la
programmation fonctionnelle.
References
Functional Programming in Kotlin - Marco Vermeulun, Runar Bjarnason and Paul Chiusano
Functional Kotlin - By Mario Arias and Rivu Chakaborty
https:/
/arrow-kt.io/docs/quickstart/
https:/
/wehightech.github.io/
https:/
/adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
https:/
/www.kodeco.com/7059961-functional-programming-with-kotlin-and-arrow-more-on-
typeclasses
Merci pour votre attention

Programmation Fonctionnelle avec Kotlin

  • 1.
    Programmation Fonctionnelle avec Kotlin DevCon#15 - 3 Nov 2022 - 100% Kotlin
  • 2.
  • 3.
    DEVCON#15 : MERCIÀ NOS PARTENAIRES !
  • 4.
    PLAN Qui suis-je ? C’estquoi une fonction pure ? Transparence référentielle Immutabilité Les fonctions d’ordre supérieur Kotlin et la programmation fonctionnelle Pourquoi Arrow-KT ? C’est quoi une monade ? Option Either Validated Monoid Folder une liste Live Coding/Demo Conclusion
  • 5.
    Qui suis-je ? RiadhMNASRI Tech lead / Dev senior passionné Adepte des pratiques crafts Je m’intéresse au clean code, programmation fonctionnelle, … J’aime apprendre et partager mes connaissances Me contacter sur Linkedin/Twitter (@riadhmnasri)
  • 6.
    C’est quoi unefonction pure ? Retourne toujours le même résultat pour les mêmes arguments Doit retourner toujours un résultat Ne fait pas d’effet de bord (Faire un changement en dehors de la fonction)
  • 7.
    Avantages des fonctionspures Facile à tester Facile à comprendre (pas de dépendance cachée ni effet de bord) Moins de risque de bugs
  • 8.
    Transparence référentielle Capacité d’uneexpression ou d’une fonction d’être remplacée par le résultat de son évaluation sans changer le résultat d’un programme.
  • 9.
    Immutabilité Un objet estimmutable si on ne peut plus changer son état une fois déclaré Thread safe/Parallélisme Pas d’effets de bords cachés
  • 10.
    Les fonctions d’ordresupérieur Est traitée par le compilateur comme n’importe quelle variable On peut la passer comme argument, la retourner par une fonction et l’assigner à une variable
  • 11.
    Kotlin et laprogrammation fonctionnelle Immutabilité (val, séparation des collections mutables/lecture, …) Les fonctions sont d’ordre supérieur Les classes ‘sealed’ Pattern Matching (expressions when) Fonctions d’extensions …
  • 12.
  • 13.
    Pourquoi Arrow-KT ? Kotlinfournit les outils pour faire la programmation fonctionnelle Kotlin n’est pas un langage fonctionnel pur Arrow.Kt: Librairie fournit des interfaces et des abstractions de la programmation fonctionnelle. Implémente les types de données (Either, …) Les types de classes (Monades, …)
  • 14.
    C’est quoi uneMonade ? Functor: un type qui dé fi nit comment transformer son contenu (dé fi nit une fonction map() ) Monade: est un functor qui dé fi nit une fonction fl atMap
  • 15.
    Option Kotlin ne contientpas le mot clé Option Arrow.kt l’enrichit avec ce type de donné
  • 16.
    Either Permet d’éviter delancer des exceptions Garder le contrôle Représenter les échecs et les exceptions comme valeur du retour
  • 17.
    Validated / NonEmptyList Ressembleà Either Permet de cumuler plusieurs exceptions
  • 18.
    Monad Comprehension Ecrire ducode dans un style séquentiel, un enchainement d’actions imbriqués Un style linéaire facile à lire Similaire aux coroutines/async-wait
  • 19.
    Une Monoide 1/2 Notionmathématique: algèbre générale C’est une structure algébrique Un ensemble muni d’une loi de composition interne associative Dé fi nit un élément neutre
  • 20.
  • 21.
    Une Monoide -Folder une Liste Permettre de faire des opérations sur une liste Une fonction pour combiner les éléments de la liste avec une valeur initiale
  • 22.
  • 23.
    Demo/Live Coding Code disponiblesur mon GitHub (riadh-mnasri) https:/ /github.com/riadh-mnasri/functional- programming-with-kotlin-arrowkt
  • 24.
    Conclusion Kotlin fournit toutce qu’il faut pour faire la programmation fonctionnelle. Arrow-KT se base sur la puissance de Kotlin pour fournir des abstractions/implémentations qui facilite la programmation fonctionnelle.
  • 25.
    References Functional Programming inKotlin - Marco Vermeulun, Runar Bjarnason and Paul Chiusano Functional Kotlin - By Mario Arias and Rivu Chakaborty https:/ /arrow-kt.io/docs/quickstart/ https:/ /wehightech.github.io/ https:/ /adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html https:/ /www.kodeco.com/7059961-functional-programming-with-kotlin-and-arrow-more-on- typeclasses
  • 26.