Kotlin Flows Beispiele

Die Programmiersprache Kotlin führt das leistungsfähige Konzept der asynchronen Programmierung ein, das als Kotlin-Flows bekannt ist. Es bietet eine reaktive und deklarative Methode zum Umgang mit asynchronen Datensequenzen oder -strömen. Im Vergleich zu herkömmlichen Callback-basierten Systemen sollen Flows die asynchronen Prozesse wie Netzwerkanforderungen oder Datenbankabfragen effektiver und kürzer verarbeiten.

Ein Flow ist grundsätzlich eine Reihe von Werten, die mit der Zeit freigegeben werden. Mehrere nachgelagerte Komponenten können diese Daten asynchron nutzen. Die nativen Sequenzen in Kotlin (wie Listen und Arrays) sind mit Flows vergleichbar, verfügen jedoch über zusätzliche Funktionen zur Verwaltung der asynchronen Aktivitäten. Coroutinen sind kleine Threads, die verwendet werden können, um die asynchronen Aufgaben geplant und geordnet auszuführen. In diesem Handbuch besprechen wir alle Verwendungsmöglichkeiten von Kotlin-Flows anhand der Codebeispiele unter Verwendung der Coroutine-Pakete.

Syntax:

Um die Kotlin-Flows verwenden zu können, müssen Sie die erforderlichen Klassen und Funktionen aus der Kotlin-Standardbibliothek, d. h. Flow-Klasse, Collect, Flow und Map-Funktion, aus dem Kotlinx.coroutines.flow-Paket importieren. Hier sind die grundlegenden Aspekte der Syntax der Kotlin-Flows:

importiere kotlinx.coroutines.flow.Flow

importiere kotlinx.coroutines.flow.collect

importiere kotlinx.coroutines.flow.flow

Mit der Builder-Funktion „Flow“ können Sie einen Flow erstellen. Sie können damit eine Anordnung von Werten skizzieren, die vom Flow ausgegeben werden. In der folgenden Beispielsyntax definieren wir einen Flow, der über die benutzerdefinierte Funktion „Create“ drei Ganzzahlen ausgibt – 4, 5 und 7:

Spaß Erstellen(): Flow = flow {

emittieren(4)

emittieren(5)

emittieren(7)

}

Um die von einem Flow ausgegebenen Werte zu nutzen, können Sie die Funktion „collect“ aus dem Paket kotlinx.coroutines.flow verwenden. Sie sollte innerhalb der main()-Funktion des Programms verwendet werden. Sie ermöglicht es Ihnen, über die ausgegebenen Werte zu iterieren und Aktionen mit ihnen auszuführen:

Spaß Haupt () {

val f = Erstellen()

f.collect { Wert ->

println(Wert)

}

}

Sie können die Operatoren auch anwenden, um mehrere Flows zu transformieren, zu filtern oder zu kombinieren. Mit dem Map-Operator können Sie beispielsweise die ausgegebenen Werte transformieren:

Spaß Doppelt(): Fluss = Fluss {

emittieren(4)

emittieren(5)

emittieren(7)

}.map { Wert ->

Wert * 3

}

Um diesen transformierten Fluss zu nutzen, können Sie die Funktion „collect“ verwenden, wie wir es zuvor in der main()-Funktion des Programmcodes getan haben:

Spaß Haupt () {

Wert db = Doppelt()

db.collect { Wert ->

println(Wert)

}

}

Beispiel 1:

Beginnen wir mit der ersten Abbildung dieses Handbuchs, um die Verwendung von Kotlin-„Flows“ in der Sprache Kotlin mithilfe einiger nützlicher Flow-Pakete und Flow-Funktionen zu demonstrieren und zu diskutieren. Mithilfe der Funktion „Flow Builder“, der Anwendung der Operatoren und der Funktion „Collect“ können Sie Flows erstellen und nutzen, um die asynchronen Datenströme reaktiv und deklarativ zu verarbeiten.

Der Code beginnt mit dem Importieren der erforderlichen Klassen und Funktionen aus dem Paket kotlinx.coroutines.flow und der Funktion kotlinx.coroutines.runBlocking aus dem Paket kotlinx.coroutines. Die Funktion „create“ wird über das Schlüsselwort „fun“ definiert, das einen Fluss von Ganzzahlen (Flow) ergibt. Innerhalb des Flow Builders wird mithilfe der Funktion „emitt“ eine Wertefolge freigegeben, z. B. 5, 2 und 9. Jeder Aufruf von „emitt“ fügt dem Flow einen Wert hinzu.

Hier startet die main()-Methode des Kotlin-Codes. In der „main“-Funktion rufen wir „runBlocking“ auf, um einen Coroutinenbereich zu erstellen, der die Suspendierungsfunktionen ausführen kann. Dadurch können wir die „collect“-Funktion verwenden, die als Hängefunktion bezeichnet wird. Die ausgesetzten Funktionen und Coroutinen werden kombiniert, um Flows zu erstellen. Eine Funktion, die ausgesetzt und dann fortgesetzt werden kann, ohne den Thread zu stoppen, wird als Suspendierungsfunktion bezeichnet.

Die Funktion „create“ wird aufgerufen und ihr zurückgegebener Flow wird der Variable „f“ zugewiesen. Die ausgegebenen Werte 5, 2 und 9 werden als zugewiesene Werte verwendet. Wir entfernen die Methode „collect“ vom Flow „f“. Sie akzeptiert eine Lambda-Funktion als Parameter und die Lambda-Funktion wird für jeden Wert aufgerufen, den der Flow ausgibt. Die Lambda-Funktion akzeptiert in dieser Situation nur den einzelnen „v“-Eingang, der für den Ausgabewert steht. Innerhalb der Lambda-Funktion druckt die Funktion println(v) jeden ausgegebenen Wert von „v“.

importiere kotlinx.coroutines.flow.Flow

importiere kotlinx.coroutines.flow.collect

importiere kotlinx.coroutines.flow.flow

importiere kotlinx.coroutines.runBlocking

Spaß Erstellen(): Flow = flow {

emittieren(5)

emittieren(2)

emittieren(9)

}

Spaß main() = runBlocking {

val f = Erstellen()

f.sammeln { v ->

drucken(v)

}

}

Wenn das Programm ausgeführt wird, druckt die Ausgabekonsole die ausgegebenen Werte (5, 2 und 9) nacheinander aus, während sie vom Flow gesammelt werden. So kann in der Kotlin-Programmierung mithilfe des Flow Builders ein einfacher Flow erstellt und seine Werte mithilfe der Funktion „collect“ verwendet werden.

Beispiel 2:

Fahren wir mit dem zweiten Beispiel dieses Handbuchs fort und verwenden dabei den im Folgenden erwähnten Code. Die wesentlichen Klassen und Methoden werden zuerst aus dem Paket kotlinx.coroutines.flow in den Code importiert, um mit Kotlin-Flows wie Flow, Collect, Map, RunBlocking usw. arbeiten zu können.

Die Funktion mit dem Namen „DoubleFlow“ wird mit dem Schlüsselwort „fun“ definiert, das einen Fluss von Ganzzahlen (Flow) zurückgibt. Diese Funktion bezeichnet einen Fluss, der drei Werte freigibt: 4, 2 und 7. Der „Flow“-Builder wird verwendet, um den Fluss in diesem Programm zu generieren. Innerhalb des Flow-Builders wird die Methode „emit“ verwendet, um die einzelnen Werte in der Sequenz freizugeben.

In diesem Fall werden die Werte 4, 2 und 7 in dieser Reihenfolge ausgegeben. Nachdem die Ausgabe der Werte definiert wurde, wird der Map-Operator auf den Flow angewendet. Der Ausdruck v * 2 wird vom Map-Operator verwendet, um jeden ausgegebenen Wert durch Verdoppelung zu ändern. Die ausgegebenen Werte werden also in 8, 4 und 14 umgewandelt. Nun folgt die Ausführung der Funktion „main“, die einen runBlocking-Block enthält (der zum Ausführen des angehaltenen Codes verwendet wird), die Methode DoubleFlow wird aufgerufen und der ausgegebene Flow wird der Variablen „df“ zugewiesen. Dann wird die Funktion „collect“ für den Flow „df“ aufgerufen. Diese Methode wird verwendet, um die ausgegebenen Werte aus dem aktuellen Flow zusammenzustellen und zu verwenden. Wenn die Lambda-Funktion an die Methode „collect“ übergeben wird, wird jeder ausgegebene Wert (v) mit der Funktion println() ausgedruckt.

importiere kotlinx.coroutines.flow.Flow

importiere kotlinx.coroutines.flow.collect

importiere kotlinx.coroutines.flow.flow

importiere kotlinx.coroutines.flow.map

importiere kotlinx.coroutines.runBlocking

Spaß DoubleFlow(): Flow = flow {

emittieren(4)

emittieren(2)

emittieren(7)

}.map { v ->

v * 2

}

Spaß main() = runBlocking {

val df = DoubleFlow()

df.sammeln { v ->

drucken(v)

}

}

Wenn der Code ausgeführt wird, erzeugt er die Ausgabe, die im folgenden Bild dargestellt ist. Diese Ausgabe entspricht den transformierten Werten, die vom Flow nach Anwendung des Map-Operators ausgegeben werden, also 8, 4 und 14 in drei separaten Zeilen (das Doppelte der ursprünglichen Werte).

Abschluss

Dieser Artikel zeigt, dass Kotlin-Flows insgesamt eine starke und einfache Methode bieten, um die asynchronen Datenströme reaktiv und ausdrucksstark zu handhaben. Sie bieten eine effektivere und skalierbarere asynchrone Programmierung in Kotlin. Die zuvor gezeigten Codeabbildungen erläuterten, wie die Kotlin-Flows erstellt und verwendet werden. Das erste Beispiel zeigt, wie ein einfacher Flow erstellt und die von ihm ausgegebenen Daten erfasst werden, während das zweite Beispiel zeigt, wie der Map-Operator verwendet wird, um die vom Flow ausgegebenen Werte zu ändern.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen