Sobes.tech
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.
  • 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]