Vous avez sûrement entendu parler des Kotlin Standard Functions et vous les utilisez probablement.
Savez-vous exactement leur intérêt et dans quel contexte faut-il les utiliser ? Savez-vous expliquer les différences entre elles ?
Kotlin nous met à disposition un ensemble de fonctions standards que nous pouvons utiliser pour simplifier notre façon de développer afin de rendre notre code plus lisible et plus compréhensible.
Je vais vous montrer cette liste de fonctions qui peuvent sembler similaires à l’utilisation mais qui ont des comportements bien différents et des objectifs bien précis : let
, run
, also
, apply
et with
.
Avant de commencer, il faut savoir que ces fonctions sont à retrouver depuis la librairie kotlin-stdlib
.
dependencies { implement "org.jetbrains.kotlin:kotlin-stdlib" }
Les fonctions standard de Kotlin sont réparties en 2 catégories selon leur contexte d’utilisation.
Nous avons les fonctions de transformation let
et run
sur lesquelles nous allons faire un focus dans cette pépite, et les fonctions de mutation also
, apply
et with
à retrouver dans la suivante.
Commençons par vous présenter nos 2 fonctions.
let
Probablement la plus utilisée dans le cas où nous voulons contourner la valeur null
, let
garde la valeur de l’objet sur lequel elle est appliquée et renvoie le résultat du bloc.
Par défaut, let
retourne un type Unit
mais dans notre exemple nous retournons un Int
pour surcharger la valeur de result.
data class Person(var name : String, var age: Int) val person = Person("Henri Pottier", 26) // Before 'let' var result = null if (person != null) { print("${person.name} is ${person.age}") result = person.age * 2 } // With 'let' val result = person?.let { print("${it.name} is ${it.age}") // Henri Pottier is 26 it.age * 2 } // person = Person(name=Henri Pottier, age=26) // result = 52
run
run
est également une fonction de transformation comme let
à la différence près que l’objet est exposé en this.
Généralement utilisée pour enchainer un bloc d’opérations afin de le distinguer et de le mettre dans notre contexte de traitement.
val person = Person("Henri Pottier", 26) // Before 'run' person.age = 54 print("${person.name} is ${person.age}") // Henri Pottier is 54 val result = person.age * 2 // With 'run' val result = person.run { age = 54 print("$name is $age") // Henri Pottier is 54 age * 2 } // person = Person(name=Henri Pottier, age=26) // result = 108 // Without object run { val person = Person("John Doe", 32) print("$person") // Person(name=John Doe, age=32) } print("$person") // Person("Henri Pottier", 54)
Nous avons maintenant compris comment utiliser les fonctions de transformation, la prochaine pépite consistera à présenter les fonctions de mutation apply
et also
.
Il faut bien comprendre, comme décrit ci-dessus, que let
et run
sont des fonctions de transformation et apply
et also
sont des fonctions de mutation.
Cette distinction est très utile car elle vous permet de montrer l’intention de votre code. Ayez pour objectif la lisibilité pour une meilleure compréhension de votre code à partir de sa forme.
Construisons un code propre à la portée de tous ! Construisons un monde meilleur !