Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ecrire son premier DSL avec Kotlin

Ecrire son premier DSL avec Kotlin

Ecrire son premier DSL avec Kotlin

Avatar for Riadh MNASRI

Riadh MNASRI

October 31, 2022

More Decks by Riadh MNASRI

Other Decks in Technology

Transcript

  1. 100% KOTLIN ESGI PARIS Riadh MNASRI ECRIRE SON 1ER DSL

    AVEC KOTLIN DevCon #15 - 3 Nov 2022 - 100% Kotlin 1
  2. Qui suis-je ? C’est quoi un DSL au juste Pourquoi

    Ecrire un DSL ? DSL Interne Outils Kotlin pour écrire un DSL Surcharge des opérateurs Type Alias Lambda en dehors des parenthèses Fonction d’extension Fonction Infix Lambda avec receiver Contrôler le scope avec DslMarker Exemple de DSL Demo/LiveCoding Conclusion PLAN 4
  3. 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) QUI SUIS-JE ? 5
  4. DSL: Domain Specific Language Langage qui cible un domaine particulier

    Ce n’est pas un langage généraliste CSS, SQL, GRADLE, … Internal DSL: Il se base sur un langage hôte External DSL: Il a une syntaxe propre et il faut coder un ‘parser’ pour pouvoir l’utiliser C’EST QUOI UN DSL AU JUSTE ? 6
  5. Avoir un code intuitif Plus facile à lire Centré sur

    le domaine Sans bruit inutile POURQUOI ECRIRE UN DSL ? 8
  6. Avantage: Evite de créer un ‘parser’ de DSL Inconvénient: limité

    par la syntaxe permise par le language On se basera sur Kotlin comme langage hôte Kotlin offre les outils nécessaires pour pourvoir écrire son propre DSL DSL INTERNE 9
  7. Surcharge opérateurs Type Alias Lambda sans parenthèse Fonctions d’extension Fonctions

    Infix Lambda avec receiver … OUTILS KOTLIN POUR ÉCRIRE UN DSL 10
  8. SURCHARGE D’OPÉRATEURS 11 Donner une signification spécifique à un opérateur

    (un sens métier) La liste des opérateurs qu’on peut surcharger est prédéfinie
  9. LAMBDA EN DEHORS DES PARENTHÈSES 13 Un Lambda paramètre d’une

    fonction Dernier paramètre de la fonction On peut sortir la fonction en dehors des parenthèses
  10. FONCTION D’EXTENSION 14 Donne la possibilité d’étendre une classe ou

    une interface Pas besoin de faire de l’héritage et le Design Pattern Décorateur
  11. FONCTION INFIX 15 Pour créer un DSL, on se basera

    beaucoup sur les fonctions Infix Quand une fonction peut être infix ? Fonction avec un receiver et un seul paramètre
  12. LAMBDA AVEC RECEIVER 16 Kotlin donne la possibilité d’ajouter un

    receiver implicite Le Lamdba est ajouté comme fonction d’extension au receiver implicite
  13. Par défaut, une fonction appelée dans un inner lambda, va

    chercher à s’attacher au 1er receiver disponible, sinon elle va tenter de chercher dans le receiver suivant On peut limiter ceci, on ajoutant l’annotation @DslMarker afin de rétrécir le scope au receiver déclaré CONTRÔLER LE SCOPE AVEC @DSLMARKER 17
  14. Ce qu’apporte d’écrire un DSL ? Rendre un code métier

    plus lisible (lecture plus intuitive, plus naturelle, …) Cacher/Supprimer le code inutile Faciliter l’échange entre différents interlocuteurs (Product Owner, Business Analyst, Développeur, …) CONCLUSION 21
  15. https://kotlinlang.org/docs/home.html Programming DSLs in Kotlin - Venkat Subramaniam Building Domain

    Specific Language in Kotlin - Greg Milette https://www.jmix.io/cuba-blog/kotlin-dsl-from-theory-to-practice/ https://blog.developer.adobe.com/building-elegant-dsls-with-kotlin-707726c5ed21 REFERENCES 22