Junior
Quelles fonctions de portée en Kotlin connaissez-vous?
sobes.tech IA
Réponse de l'IA
let: Exécute un bloc de code sur un objet et retourne le résultat de la dernière expression. Souvent utilisé pour des appels sécurisés de méthodes sur des objets nullable.run: A deux variantes :- En tant que fonction d'extension : Exécute un bloc de code sur l'objet (
this) et retourne le résultat de la dernière expression. - En tant que fonction autonome : Exécute un bloc de code sans récepteur et retourne le résultat de la dernière expression.
- En tant que fonction d'extension : Exécute un bloc de code sur l'objet (
with: Exécute un bloc de code sur un objet récepteur fourni en argument et retourne le résultat de la dernière expression.apply: Exécute un bloc de code sur un objet (this) et retourne l'objet lui-même. Souvent utilisé pour configurer les propriétés de l'objet.also: Exécute un bloc de code sur un objet (it) et retourne l'objet lui-même. Utilisé pour effectuer des actions secondaires sur l'objet.
// Exemple d'utilisation de let
val name: String? = "Kotlin"
val length = name?.let {
// this == null
// it == "Kotlin"
it.length // Retourne la longueur de la chaîne
} // length == 6
// Exemple d'utilisation de run comme extension
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
listOf(first(), last())
// this == numbers
} // firstAndLast == [1, 3]
// Exemple d'utilisation de run comme fonction autonome
val result = run {
// Sans récepteur
println("Exécution d'un bloc")
1 + 2 // Retourne 3
} // result == 3
// Exemple d'utilisation de with
val configuration = configureUsing {
// this - objet passé à configureUsing
width = 100
height = 200
}
fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
val example = ScopeExample()
example.builder()
return example
}
class ScopeExample {
var width: Int = 0
var height: Int = 0
}
// Exemple d'utilisation de apply
val person = mutableListOf<String>().apply {
// this == liste
add("Alice")
add("Bob")
} // person == ["Alice", "Bob"]
// Exemple d'utilisation de also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
// it == liste
println("Traitement de la liste : $it")
}.map { it * 2 } // doubledList == [2, 4, 6]