In diesem Tutorial werden wir einige der wichtigen Standardbibliotheksfunktionen implementieren, die in Kotlin verfügbar sind. Die kotlin-stdlib
bietet uns nützliche Höhere-Ordnungs-Funktionen, die idiomatische Muster implementieren. Wir werden sehen, wie sie das Programmieren in Kotlin so einfacher und schneller machen. Die unten diskutierten Funktionen sind:
- let
- run
- also
- apply
- with
Kotlin let
let
nimmt das Objekt, auf das es aufgerufen wird, als Parameter und gibt das Ergebnis des Lambda-Ausdrucks zurück. Kotlin let ist eine Umgebungsfunktion, bei der die innerhalb des Ausdrucks deklarierten Variablen außerhalb nicht verwendet werden können. Ein Beispiel, das die Funktion kotlin let demonstriert, ist unten angegeben.
fun main(args: Array) {
var str = "Hello World"
str.let { println("$it!!") }
println(str)
}
//Prints
//Hallo Welt!!
//Hallo Welt
it
-Schlüsselwort enthält die Kopie der Eigenschaft innerhalb von let
. Der letzte Wert aus dem let wird als Argument zurückgegeben, wie unten gezeigt.
var strLength = str.let { "$it function".length }
println("strLength is $strLength") //prints strLength is 25
Verschachtelung von let-Funktionen
var a = 1
var b= 2
a = a.let { it + 2 }.let { val i = it + b
i}
println(a) //5
Wie Sie sehen können, haben wir eine lokale Variable „i“ innerhalb der zweiten let-Funktion deklariert. Wenn wir die letzte Anweisung der let-Funktion auf i
setzen, wird die Eigenschaft an die äußere Eigenschaft a
zurückgegeben.
Verschachtelung von let
Wir können einen let-Ausdruck innerhalb eines anderen let-Ausdrucks wie unten gezeigt festlegen.
var x = "Anupam"
x.let { outer -> outer.let { inner -> print("Inner is $inner and outer is $outer") } }
//Prints
//Inneres ist Anupam und äußeres ist Anupam
Für verschachteltes let können wir das Schlüsselwort it
nicht verwenden. Wir müssen explizite Namen für it
in beiden let-Funktionen zuweisen. Nur das äußerste let gibt den Wert wie unten gezeigt zurück.
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
let für Nullprüfungen
Zusätzlich ist let nützlich zum Überprüfen von Nullable-Eigenschaften wie unten gezeigt.
var name : String? = "Kotlin let null check"
name?.let { println(it) } //prints Kotlin let null check
name = null
name?.let { println(it) } //nothing happens
Der Code innerhalb des let-Ausdrucks wird nur ausgeführt, wenn die Eigenschaft nicht null ist. Somit erspart uns let auch den if else Null-Checker!
Kotlin ausführen
Kotlin run
ist eine weitere interessante Funktion. Das folgende Beispiel zeigt ihre Anwendungsfälle.
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
Die Kotlin-
run
-Expression kann die äußere Eigenschaft ändern. Daher haben wir sie im obigen Code für den lokalen Bereich neu definiert.
- Ähnlich wie die Funktion
let
gibt die Funktionrun
auch die letzte Anweisung zurück. - Im Gegensatz zu
let
unterstützt die Funktionrun
jedoch nicht das Schlüsselwortit
.
let und run
Lassen Sie uns die Funktionen let
und run
zusammenführen.
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 war null. Standardwert setzen auf:
//Kotlin
Kotlin auch
Wie der Name schon sagt, führt die also
-Expression eine zusätzliche Verarbeitung des aufgerufenen Objekts durch. Im Gegensatz zu let
gibt es jedoch das Originalobjekt zurück, anstatt neue Rückgabedaten zu erzeugen. Daher hat das Rückgabedaten immer den gleichen Typ. Ähnlich wie let
verwendet auch also
it
.
var m = 1
m = m.also { it + 1 }.also { it + 1 }
println(m) //prints 1
Kotlin let vs also
Der folgende Codeausschnitt zeigt ein großartiges Beispiel, um zwischen let
und also
zu unterscheiden.
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)
Im obigen Code haben wir Datenträgerklassen verwendet. Der also-Ausdruck gibt das Datenklassenobjekt zurück, während der let-Ausdruck nichts (Unit) zurückgibt, da wir nichts explizit angegeben haben.
Kotlin apply
Kotlin apply
ist eine Erweiterungsfunktion für einen Typ. Es wird auf die Objektreferenz (auch als Empfänger bezeichnet) im Ausdruck angewendet und gibt die Objektreferenz bei Abschluss zurück.
data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")
person.apply { this.tutorial = "Swift" }
println(person)
apply vs also
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)
Hinweis: In apply ist
it
nicht erlaubt. Wenn der Eigenschaftsname der Datenträgerklasse in der Funktion eindeutig ist, können Sie this
weglassen. Wir sollten also
nur verwenden, wenn wir this
nicht verdecken möchten.
Kotlin mit
Wie apply
wird with
verwendet, um Instanzeigenschaften zu ändern, ohne jedes Mal den Punktoperator über den Verweis aufrufen zu müssen.
data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")
with(person)
{
name = "No Name"
tutorial = "Kotlin tutorials"
}
Noch einmal,
with
ist ähnlich wie apply
, bis auf einige Unterschiede.
Kotlin apply vs with
- with wird ohne ein Objekt (Empfänger) ausgeführt, während apply eines benötigt.
- apply wird auf der Objektreferenz ausgeführt, während with sie nur als Argument übergibt.
- Der letzte Ausdruck der with-Funktion gibt ein Ergebnis zurück.
var xyz = with(person)
{
name = "No Name"
tutorial = "Kotlin tutorials"
val xyz = "End of tutorial"
xyz
}
println(xyz) //End of tutorial
Das ist alles für die Kotlin-Standardfunktionen zum Ändern von Variablen oder Modifizieren von Objekten innerhalb der Funktion.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-let-run-also-apply-with