SlideShare a Scribd company logo
1 of 23
Download to read offline
100% KOTLIN ESGI PARIS
Riadh MNASRI
ECRIRE SON 1ER DSL AVEC
KOTLIN
DevCon #15 - 3 Nov 2022 - 100% Kotlin
1
DEVCON#15
3-XI-2022
Riadh MNASRI
DEVCON#15 : MERCI À NOS PARTENAIRES !
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
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
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
POURQUOI ECRIRE UN DSL
7
Avoir un code intuitif
Plus facile à lire
Centré sur le domaine
Sans bruit inutile
POURQUOI ECRIRE UN DSL ?
8
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
Surcharge opérateurs
Type Alias
Lambda sans parenthèse
Fonctions d’extension
Fonctions Infix
Lambda avec receiver
…
OUTILS KOTLIN POUR ÉCRIRE UN DSL
10
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
On peut renommer une classe afin d’expliciter un concept
TYPE ALIAS
12
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
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
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
LAMBDA AVEC RECEIVER
16
Kotlin donne la possibilité d’ajouter un receiver implicite
Le Lamdba est ajouté comme fonction d’extension au receiver implicite
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
EXEMPLE DE DSL
18
LIVE CODING/DEMO
19
Code disponible sur mon GitHub
https://github.com/riadh-mnasri/write-your-first-dsl-kotlin
LIVE CODING / DEMO
20
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
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
MERCI POUR VOTRE ATTENTION
23

More Related Content

Similar to Ecrire son 1er DSL avec Kotlin

NouveautéS De Visual Basic 2010 V2
NouveautéS De Visual Basic 2010 V2NouveautéS De Visual Basic 2010 V2
NouveautéS De Visual Basic 2010 V2Gregory Renard
 
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Clément OUDOT
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPClément OUDOT
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Arrow Group
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Sécuriser vos accès nomades pour accéder à Exchange et Lync
Sécuriser vos accès nomades pour accéder à Exchange et LyncSécuriser vos accès nomades pour accéder à Exchange et Lync
Sécuriser vos accès nomades pour accéder à Exchange et LyncMicrosoft Technet France
 
Découverte .Net Core et Asp.Net Core
Découverte .Net Core et Asp.Net CoreDécouverte .Net Core et Asp.Net Core
Découverte .Net Core et Asp.Net CoreIonut Mihalcea
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsMICHRAFY MUSTAFA
 
DOCKER@ORANGE SEASON 2
DOCKER@ORANGE SEASON 2DOCKER@ORANGE SEASON 2
DOCKER@ORANGE SEASON 2TREEPTIK
 
Créer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenCréer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenAmico Fabien
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm
 

Similar to Ecrire son 1er DSL avec Kotlin (13)

NouveautéS De Visual Basic 2010 V2
NouveautéS De Visual Basic 2010 V2NouveautéS De Visual Basic 2010 V2
NouveautéS De Visual Basic 2010 V2
 
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
Matinée Pour Comprendre LinID - Intégration du serveur Active Directory avec ...
 
Cours compilation
Cours compilationCours compilation
Cours compilation
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAP
 
Techday Arrow Group: Java 8
Techday Arrow Group: Java 8Techday Arrow Group: Java 8
Techday Arrow Group: Java 8
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Sécuriser vos accès nomades pour accéder à Exchange et Lync
Sécuriser vos accès nomades pour accéder à Exchange et LyncSécuriser vos accès nomades pour accéder à Exchange et Lync
Sécuriser vos accès nomades pour accéder à Exchange et Lync
 
Découverte .Net Core et Asp.Net Core
Découverte .Net Core et Asp.Net CoreDécouverte .Net Core et Asp.Net Core
Découverte .Net Core et Asp.Net Core
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
DOCKER@ORANGE SEASON 2
DOCKER@ORANGE SEASON 2DOCKER@ORANGE SEASON 2
DOCKER@ORANGE SEASON 2
 
Créer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et MavenCréer un Micro PaaS avec Docker et Maven
Créer un Micro PaaS avec Docker et Maven
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2
 

More from Riadh MNASRI

Programmation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec KotlinProgrammation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec KotlinRiadh MNASRI
 
Functional programming with streams
Functional programming with streamsFunctional programming with streams
Functional programming with streamsRiadh MNASRI
 
BBL Reactive Programming
BBL Reactive ProgrammingBBL Reactive Programming
BBL Reactive ProgrammingRiadh MNASRI
 
Discover Micronaut
Discover MicronautDiscover Micronaut
Discover MicronautRiadh MNASRI
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservicesRiadh MNASRI
 

More from Riadh MNASRI (6)

Programmation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec KotlinProgrammation Fonctionnelle avec Kotlin
Programmation Fonctionnelle avec Kotlin
 
Functional programming with streams
Functional programming with streamsFunctional programming with streams
Functional programming with streams
 
BBL Reactive Programming
BBL Reactive ProgrammingBBL Reactive Programming
BBL Reactive Programming
 
Discover Micronaut
Discover MicronautDiscover Micronaut
Discover Micronaut
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservices
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
 

Ecrire son 1er DSL avec Kotlin

  • 1. 100% KOTLIN ESGI PARIS Riadh MNASRI ECRIRE SON 1ER DSL AVEC KOTLIN DevCon #15 - 3 Nov 2022 - 100% Kotlin 1
  • 3. DEVCON#15 : MERCI À NOS PARTENAIRES !
  • 4. 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
  • 5. 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
  • 6. 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
  • 8. Avoir un code intuitif Plus facile à lire Centré sur le domaine Sans bruit inutile POURQUOI ECRIRE UN DSL ? 8
  • 9. 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
  • 10. Surcharge opérateurs Type Alias Lambda sans parenthèse Fonctions d’extension Fonctions Infix Lambda avec receiver … OUTILS KOTLIN POUR ÉCRIRE UN DSL 10
  • 11. 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
  • 12. On peut renommer une classe afin d’expliciter un concept TYPE ALIAS 12
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. LAMBDA AVEC RECEIVER 16 Kotlin donne la possibilité d’ajouter un receiver implicite Le Lamdba est ajouté comme fonction d’extension au receiver implicite
  • 17. 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
  • 20. Code disponible sur mon GitHub https://github.com/riadh-mnasri/write-your-first-dsl-kotlin LIVE CODING / DEMO 20
  • 21. 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
  • 22. 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
  • 23. MERCI POUR VOTRE ATTENTION 23