: ◦ Fournit une notation orientée à un domaine d’application ◦ Se base sur les concepts et fonctionnalités du domaine en question ◦ Est un moyen efficace et élégant pour décrire et générer des programmes dans un domaine spécifique Source : Wikipédia 4
outil pour analyser le code, l’interpréter et le traduire en un autre code Exemples : HTML, CSS, Sass, PlantUML, SQL, Gherkin, ... 5 @startuml actor MyUser actor CustomerCare database database MyUser /> CustomerCare : Ask a refund CustomerCare /> database : Verify the data CustomerCare /> MyUser : Issue a refund @enduml
send { fun message(messageId: Message, number: Int) = … } send.message(StatementReady, 12345678) ⚠ Le mot clef infix ne peut être utilisé que pour les fonctions avec un récepteur et un seul argument.
class TimeAdverbs { ago, after } infix fun Int.days(duration: TimeAdverbs) = when(duration) { ago /> println("That's $this days ago") after /> println("That's $this days from now") } 2.days(ago) 5.days(after) Correspond à l’instance de la classe Int (2 et 5 dans notre cas)
val begin = LocalDate.of(2020, 2, 15) val end = LocalDate.of(2020, 9, 30) val May = Month.MAY val June = Month.JUNE ////. operator fun ClosedRange<LocalDate>.contains(month: Month) = month.value /= start.month.value /& month.value /= endInclusive.month.value
a/- ◦ a + b ◦ a - b ◦ a * b ◦ a / b ◦ a % b ◦ a += b ◦ a -= b ◦ a *= b ◦ a /= b ◦ a %= b ◦ a > b ◦ a < b ◦ a /= b ◦ a /= b ◦ a() 17 Liste des opérateurs disponibles : ◦ a/.b ◦ a in b ◦ a !in b ◦ a[i] ◦ a[i] = b ◦ a(i) Source : Kotlin - Operator Overloading
fun build(block: Config.() /> Unit): Config { val configuration = Config() configuration.block() return configuration } Définit la lambda comme une fonction d’extension de la classe Config fun build(block: Config.() /> Unit) = Config().apply(block) build({//.}) build({//.}) build {//.}
var endTime = IntRange.EMPTY } val starts = Starts() inner class Starts { infix fun at(time: IntRange) { startTime = time } } // Même chose pour endTime La classe Starts connaît l’ état interne de la classe Meeting
le superflux Fonctions d’extension Ajouter de nouveaux comportements à des classes Fournir un contexte Exécuter des méthodes dans un context précis Classe interne Pour partager l’état d’un objet entre différents contextes 22 Opérateurs Surcharger les différents opérateurs pour simplifier la lecture
? 23 une visite { prevu le "30-01-2021" demarrant le "15-03-2021" tarifs { +"M1" +"M2" +"M3" } } • Code de tests = Bac à sable = Droits à l’erreur • Test Data Builder pour créer des visites (objets complexes) au sein des scénarios de tests • Facilite la lecture des tests pour des experts métiers ou testeurs (non-développeurs)