Sobes.tech
Junior

Explique comment utiliser les fonctions 'with' et 'let' en Kotlin.

sobes.tech IA

Réponse de l'IA

with et let sont des fonctions standard de la bibliothèque Kotlin, conçues pour faciliter la manipulation d'objets, notamment lors de l'exécution de plusieurs opérations sur le même objet.

with

  • with prend un objet (récepteur) et une lambda en arguments.
  • À l'intérieur de la lambda, this fait référence à l'objet récepteur.
  • Renvoie le résultat de la dernière expression dans la lambda.
// Exemple d'utilisation de with
class Person(var name: String, var age: Int)

fun main() {
    val person = Person("Alice", 30)

    val description = with(person) {
        // this fait référence à person
        this.age += 1 // Peut être omis
        "Name: $name, New age: $age" // Cette chaîne est renvoyée
    }

    println(description) // Output: Name: Alice, New age: 31
}

Utilisé lorsque plusieurs opérations doivent être effectuées sur un même objet sans avoir besoin de renvoyer l'objet lui-même. Utile pour la configuration d'objets.

let

  • let est appelé sur un objet (récepteur) en tant que fonction d'extension et prend une lambda en argument.
  • À l'intérieur de la lambda, it (ou un nom personnalisé) fait référence à l'objet récepteur.
  • Renvoie le résultat de la dernière expression dans la lambda.
// Exemple d'utilisation de let
fun main() {
    val name: String? = "Bob"

    val length = name?.let {
        // it fait référence à name
        println("Le nom n'est pas null : $it")
        it.length // Renvoie la longueur de la chaîne
    }

    println("Longueur : $length") // Output: Le nom n'est pas null : Bob, Longueur : 3

    val nullName: String? = null
    val lengthOfNull = nullName?.let {
        // Ce bloc ne sera pas exécuté, car nullName == null
        it.length
    }

    println("Longueur de null : $lengthOfNull") // Output: Longueur de null : null
}

Utilisé lorsque vous souhaitez effectuer des opérations sur un objet non nul (souvent en combinaison avec l'opérateur de navigation sûre ?.) ou lorsque vous souhaitez introduire une nouvelle portée avec une variable locale pour l'objet (it).

Principales différences :

  • Mode d'appel : with est appelé comme une fonction, let comme une fonction d'extension.
  • Variable de référence dans la lambda : with utilise this, let utilise it (ou un nom personnalisé).
  • Objectif principal : with est principalement utilisé pour la configuration, let est souvent utilisé pour des opérations sur des objets potentiellement nulls et pour créer des portées locales.
with let
Appel Fonction : with(objet) { ... } Fonction d'extension : objet.let { ... }
Référence this it (ou un nom personnalisé)
Renvoie Résultat de la dernière expression dans la lambda Résultat de la dernière expression dans la lambda
Utilisation principale Configuration d'objet, regroupement d'opérations Vérification de null (?.let), portée locale