Recherche de site Web

Kotlin let, run, also, apply, with


Dans ce tutoriel, nous allons implémenter certaines des fonctions importantes de la bibliothèque standard disponibles en Kotlin. Le kotlin-stdlib nous fournit des fonctions d'ordre supérieur utiles implémentant des modèles idiomatiques. Nous verrons comment elles rendent la programmation en Kotlin plus facile et plus rapide. Les fonctions dont nous allons discuter ci-dessous sont :

  • laisser
  • courir
  • aussi
  • appliquer
  • avec

Kotlin laisse

let prend l'objet sur lequel il est invoqué comme paramètre et renvoie le résultat de l'expression lambda. Kotlin let est une fonction de portée dans laquelle les variables déclarées à l'intérieur de l'expression ne peuvent pas être utilisées à l'extérieur. Un exemple démontrant la fonction kotlin let est donné ci-dessous.

fun main(args: Array<String>) {
    var str = "Hello World"
    str.let { println("$it!!") }
    println(str)

}
//Prints
//Hello World!!
//Hello World

Le mot-clé it contient la copie de la propriété à l'intérieur de let. La dernière valeur de let est retournée comme argument comme montré ci-dessous.

var strLength = str.let { "$it function".length }
println("strLength is $strLength") //prints strLength is 25

Chaînage des fonctions let

var a = 1
var b= 2

a = a.let { it + 2 }.let { val i = it + b
        i}
println(a) //5

Comme vous pouvez le voir, nous avons déclaré une variable locale « i » à l'intérieur de la deuxième fonction let. Mettre la dernière instruction de la fonction let à i renvoie la propriété à la propriété externe a.

Imbrication de let

Nous pouvons placer une expression let à l'intérieur d'une autre expression let comme montré ci-dessous.

var x = "Anupam"
x.let { outer -> outer.let { inner -> print("Inner is $inner and outer is $outer") } }

//Prints
//Inner is Anupam and outer is Anupam

Pour un let imbriqué, nous ne pouvons pas utiliser le mot-clé it. Nous devons attribuer des noms explicites à it dans les deux fonctions let. Seul le let le plus externe renvoie la valeur comme indiqué ci-dessous.

var x = "Anupam"
    x = x.let { outer ->
        outer.let { inner ->
            println("Inner is $inner and outer is $outer")
            "Kotlin Tutorials Inner let"
        }
        "Kotlin Tutorials Outer let" 
    }
    println(x) //prints Kotlin Tutorials Outer let

laisser pour les vérifications null

De plus, let est utile pour vérifier les propriétés Nullable comme montré ci-dessous.

var name : String? = "Kotlin let null check"
name?.let { println(it) } //prints Kotlin let null check
name = null
name?.let { println(it) } //nothing happens

Le code à l'intérieur de l'expression let est exécuté uniquement lorsque la propriété n'est pas nulle. Ainsi, let nous évite également le test if else pour null !

Exécuter Kotlin

Kotlin run est une autre fonction intéressante. L'exemple suivant démontre ses cas d'utilisation.

var tutorial = "This is Kotlin Tutorial"
    println(tutorial) //This is Kotlin Tutorial
    tutorial = run {
        val tutorial = "This is run function"
        tutorial
    }
    println(tutorial) //This is run function

L'expression run de Kotlin peut modifier la propriété externe. Ainsi, dans le code ci-dessus, nous l'avons redéfinie pour la portée locale.

  • Similaire à la fonction let, la fonction run retourne également la dernière instruction.
  • Contrairement à let, la fonction run ne prend pas en charge le mot-clé it.

laisser et courir

Combinons les fonctions let et run ensemble.

var p : String? = null
    p?.let { println("p is $p") } ?: run { println("p was null. Setting default value to: ")
        p = "Kotlin"}

    println(p)
//Prints
//p was null. Setting default value to: 
//Kotlin

Kotlin aussi

Comme le nom l'indique, les expressions also effectuent un traitement supplémentaire sur l'objet sur lequel elles ont été invoquées. Contrairement à let, elles retournent l'objet original au lieu de toute nouvelle donnée de retour. Ainsi, les données de retour ont toujours le même type. Comme let, also utilise également it.

var m = 1
m = m.also { it + 1 }.also { it + 1 }
println(m) //prints 1 

Kotlin let vs aussi

L'extrait de code suivant montre un excellent exemple pour différencier let et also.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

var l = person.let { it.tutorial = "Android" }
var al = person.also { it.tutorial = "Android" }
    
println(l)
println(al)
println(person)

Dans le code ci-dessus, nous avons utilisé des classes de données. L'expression also retourne l'objet de la classe de données tandis que l'expression let ne retourne rien (Unit) car nous n'avons rien spécifié explicitement.

Kotlin appliquer

Kotlin apply est une fonction d'extension sur un type. Elle s'exécute sur la référence de l'objet (également connue sous le nom de récepteur) dans l'expression et renvoie la référence de l'objet une fois terminée.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

person.apply { this.tutorial = "Swift" }
println(person)

appliquer vs aussi

data class Person(var n: String, var t : String)
var person = Person("Anupam", "Kotlin")

person.apply { t = "Swift" }
println(person)

person.also { it.t = "Kotlin" }
println(person)

Remarque : Dans apply, it n’est pas autorisé. Si le nom de la propriété de la classe de données est unique dans la fonction, vous pouvez omettre this. Nous devrions utiliser also uniquement lorsque nous ne voulons pas masquer this.

Kotlin avec

Comme apply, with est utilisé pour modifier les propriétés d'une instance sans avoir besoin d'appeler l'opérateur point sur la référence à chaque fois.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
    }

Encore une fois, with est similaire à apply sauf pour quelques différences.

Kotlin apply vs with

  • avec runs sans un objet (récepteur) tandis que apply en nécessite un.
  • apply s'exécute sur la référence de l'objet, tandis qu'avec just il la passe comme argument.
  • La dernière expression de la fonction renvoie un résultat.
var xyz = with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
        val xyz = "End of tutorial"
        xyz
    }
    println(xyz) //End of tutorial

C'est tout pour les fonctions standard de Kotlin permettant de modifier des variables ou de changer des objets à l'intérieur de la fonction.