Quelle est la différence entre les fonctions d'extension let, run, also et apply en Kotlin?
sobes.tech IA
Réponse de l'IA
let : Appelle une fermeture sur un objet et retourne le résultat de la fermeture. Permet d'utiliser l'objet comme argument dans une expression lambda (it). Utile pour travailler avec des objets nullable.
// Exemple d'utilisation de let
val nullableString: String? = "Hello"
val length = nullableString?.let {
// it - c'est une String non nulle
it.length
}
run : Exécute un bloc de code sur un objet et retourne le résultat du bloc. À l'intérieur du bloc, l'objet est accessible comme this. Utile pour l'initialisation et l'appel de méthodes.
// Exemple d'utilisation de run
val result = buildString {
// this - c'est un StringBuilder
append("Start\n")
append("Middle\n")
}.run {
// this - c'est un String
uppercase()
}
also : Appelle une fermeture sur un objet et retourne l'objet lui-même. Permet d'effectuer des actions supplémentaires (comme la journalisation ou la configuration) sans modifier l'objet.
// Exemple d'utilisation de also
val list = mutableListOf("a", "b", "c").also {
// it - c'est une MutableList
println("Liste créée : $it")
}
apply : Appelle une fermeture sur un objet et retourne l'objet lui-même. À l'intérieur du bloc, l'objet est accessible comme this. Utile pour configurer les propriétés de l'objet.
// Exemple d'utilisation de apply
val textView = TextView(context).apply {
// this - c'est un TextView
text = "Bonjour, le monde!"
textSize = 16f
setTextColor(Color.BLACK)
}
Principales différences :
| Fonction | Comment l'objet est accessible | Ce qu'elle retourne | Usage typique |
|---|---|---|---|
let |
it |
Résultat de la lambda | Objets nullable, transformation |
run |
this |
Résultat de la lambda | Initialisation et appel de méthodes |
also |
it |
L'objet lui-même | Actions supplémentaires (effets secondaires) |
apply |
this |
L'objet lui-même | Configuration des propriétés |