Junior
Qu'est-ce que les 'fonctions de portée' en Kotlin et quand faut-il les utiliser?
sobes.tech IA
Réponse de l'IA
Les fonctions de portée permettent d'exécuter un bloc de code dans le contexte d'un objet. Les fonctions principales sont : let, run, with, apply, also. Chacune a ses propres caractéristiques concernant le receveur (invocateur, receveur) et la valeur de retour.
| Fonction | Receveur | Valeur de retour |
|---|---|---|
let |
it |
Le résultat de la dernière expression dans le bloc |
run |
this |
Le résultat de la dernière expression dans le bloc |
with |
this (pas en tant que méthode d'extension) |
Le résultat de la dernière expression dans le bloc |
apply |
this |
L'objet lui-même configuré |
also |
it |
L'objet lui-même configuré |
Utilisation :
let: Pour effectuer des actions sur un objet pouvant être null, ou pour introduire une variable locale avec un nom plus court.
// Exemple : appel sécurisé d'une méthode sur un objet nullable
val str: String? = "Hello"
str?.let {
println(it.length) // Ne s'exécute que si str n'est pas null
}
run: Pour exécuter un bloc de code avec le contexte de l'objet (commewith), mais en tant que méthode d'extension, ou lorsque vous souhaitez calculer une valeur dans le contexte de l'objet.
// Exemple : configuration d'un objet et obtention du résultat
val configurations = buildList {
add("Config 1")
add("Config 2")
}.run {
println("Applying configurations...")
joinToString(", ") // Exécuté dans le contexte de List<String>, retourne String
}
println(configurations)
with: Pour grouper des appels de méthodes d'un objet sans utiliser de "point" devant chaque appel. Ce n'est pas une méthode d'extension.
// Exemple : regroupement d'appels de méthodes d'un même objet
val person = Person("Alice", 30)
with(person) {
println(name) // Accès direct aux propriétés
println(age)
}
apply: Pour configurer un objet. Retourne l'objet lui-même configuré. Utile pour créer et initialiser des objets en une seule expression.
// Exemple : création et configuration d'un objet en une étape
val button = Button().apply {
text = "Click Me"
onClick = { println("Button clicked") }
}
also: Pour effectuer des actions supplémentaires sur un objet, comme la journalisation, après une opération. Retourne l'objet lui-même.
// Exemple : journalisation après une action
val number = 42
val squared = number.also {
println("Processing number: $it") // Exécuté sur it (number), retourne number
}.run {
this * this // Exécuté sur this (number), retourne le carré
}
println("Squared value: $squared")
Le choix de la fonction de portée appropriée dépend de ce que vous souhaitez faire avec l'objet et de la valeur qui doit être retournée.