Kotlin Lambdas

Lambda-Ausdrücke

Lambda-Ausdruck oder einfach Lambda ist eine anonyme Funktion; eine Funktion ohne Namen. Diese Funktionen werden sofort als Ausdruck ohne Deklaration übergeben. Beispielsweise,

 fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Hallo!

Hier wird der variablen Begrüßung ein Lambda-Ausdruck zugewiesen. Der Ausdruck akzeptiert keine Parameter und gibt in diesem Programm keinen Wert zurück.

Dann wird die Funktion (Lambda-Ausdruck) wie folgt aufgerufen:

 Gruß() 

Beispiel: Lambda mit Parametern und Rückgabetyp

Das folgende Programm verfügt über einen Lambda-Ausdruck, der zwei Ganzzahlen als Parameter akzeptiert und das Produkt dieser beiden Ganzzahlen zurückgibt.

 fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 27

Hier lautet der Lambda-Ausdruck:

Beachten Sie, dass ein Lambda-Ausdruck in geschweiften Klammern eingeschlossen ist.

Funktion höherer Ordnung

Koltin hat eine großartige Unterstützung für die funktionale Programmierung. Sie können Funktionen als Argumente an andere Funktionen übergeben. Sie können auch eine Funktion von anderen Funktionen zurückgeben. Diese Funktionen werden Funktionen höherer Ordnung genannt.

Oft werden Lambda-Ausdrücke der Einfachheit halber an eine Funktion höherer Ordnung (anstatt an eine typische Funktion) übergeben.

Beispiel: Lambda an Function übergeben

Übergeben wir einen Lambda-Ausdruck an eine Funktion höherer Ordnung. So können Sie es machen.

 fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Hallo!

Hier callMe()ist eine Funktion höherer Ordnung (weil sie die Funktion als Parameter übernimmt). Der Begrüßungsparameter akzeptiert das an die callMe()Funktion übergebene Lambda als:

 Begrüßung: () -> Einheit

Die leere Klammer weist darauf hin, dass die übergebene anonyme Funktion keine Parameter akzeptiert. Das UnitSchlüsselwort weist darauf hin, dass die anonyme Funktion keinen Wert zurückgibt.

Lambdas werden häufig bei der Arbeit mit Sammlungen verwendet. In der Standardbibliothek stehen mehrere integrierte Funktionen zur Verfügung, die Lambdas verwenden, um unsere Aufgabe zu vereinfachen. Hier sehen Sie einige Beispiele:

Beispiel: maxBy () Funktion

Die Funktion maxBy () gibt das erste Element zurück, das den größten Wert der angegebenen Funktion liefert, oder nullwenn keine Elemente vorhanden sind.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Name der Person (Name = Jack, Alter = 34): Jack Alter: 34

Hier nimmt die maxBy()Funktion eine Liste von Personenobjekten und gibt das Personenobjekt mit dem maximalen Alter zurück.

it Schlüsselwort: Wird für einzelne Parameter verwendet

Im obigen Programm akzeptiert der Lambda-Ausdruck nur einen Parameter (eine Liste von Personenobjekten). In solchen Fällen können Sie das Argument mit dem Schlüsselwort referenzieren it.

Sie können ersetzen

 val selectedPerson = people.maxBy ((person -> person.age))

mit

 val selectedPerson = people.maxBy ((it.age)) 

im obigen Programm.

Beispiel: Funktion maxBy () und launchWith ()

Das folgende Programm berechnet das maximale Alter eines Personenobjekts beginnend mit Buchstabe S.

Wir werden zwei Bibliotheksfunktionen nutzen maxBy()und startsWith()diese Aufgabe zu erfüllen. Die Funktion starsWith () gibt zurück, truewenn sie mit dem angegebenen Zeichen beginnt, das als Argument übergeben wurde.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Name der Person (Name = Shane, Alter = 22): Shane Alter: 22

Empfohlene Lektüre

  • Kotlin-Verschlüsse
  • Kotlin Mit und bewerben

Interessante Beiträge...