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 WorldLe 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 25Chaî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 AnupamPour 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 letlaisser 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 happensLe 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 functionL'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:
//KotlinKotlin 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 tutorialC'est tout pour les fonctions standard de Kotlin permettant de modifier des variables ou de changer des objets à l'intérieur de la fonction.









