Suche…


Bemerkungen

In Kotlin werden Loops, wo immer möglich, zu optimierten Loops zusammengestellt. Wenn Sie beispielsweise einen Zahlenbereich durchlaufen, wird der Bytecode basierend auf einfachen int-Werten in eine entsprechende Schleife herunterkompiliert, um den Aufwand für die Objekterstellung zu vermeiden.

Wiederholen Sie eine Aktion x-mal

repeat(10) { i ->
    println("This line will be printed 10 times")
    println("We are on the ${i + 1}. loop iteration")
}

Schleifen über iterables

Sie können jedes iterable durchlaufen, indem Sie die standardmäßige for-Schleife verwenden:

val list = listOf("Hello", "World", "!")
for(str in list) {
    print(str)
}

Viele Dinge in Kotlin sind wiederholbar, wie Zahlenbereiche:

for(i in 0..9) {
    print(i)
}

Wenn Sie während der Iteration einen Index benötigen:

for((index, element) in iterable.withIndex()) {
    print("$element at index $index")
}

Es gibt auch einen funktionalen Ansatz zum Durchlaufen der Standardbibliothek ohne ersichtliche Sprachkonstrukte mit der Funktion forEach:

iterable.forEach {
    print(it.toString())
}

it in diesem Beispiel implizit das aktuelle Element, siehe Lambda-Funktionen

Während Schleifen

While- und Do-While-Loops funktionieren wie in anderen Sprachen:

while(condition) {
    doSomething()
}

do {
    doSomething()
} while (condition)

In der do-while-Schleife hat der Bedingungsblock Zugriff auf Werte und Variablen, die im Schleifenkörper deklariert sind.

Pause und weiter

Break- und Continue-Keywords funktionieren wie in anderen Sprachen.

while(true) {
    if(condition1) {
        continue // Will immediately start the next iteration, without executing the rest of the loop body
    }
    if(condition2) {
        break // Will exit the loop completely
    }
}

Wenn Sie geschachtelte Schleifen haben, können Sie die Schleifenanweisungen benennen und die Anweisungen break und continue qualifizieren, um anzugeben, welche Schleife Sie fortsetzen oder unterbrechen möchten:

outer@ for(i in 0..10) {
    inner@ for(j in 0..10) {
        break       // Will break the inner loop
        break@inner // Will break the inner loop
        break@outer // Will break the outer loop
    }
}

Dieser Ansatz funktioniert jedoch nicht für das funktionale forEach Konstrukt.

Iteration über eine Karte in Kotlin

//iterates over a map, getting the key and value at once

var map = hashMapOf(1 to "foo", 2 to "bar", 3 to "baz")

for ((key, value) in map) {
    println("Map[$key] = $value")
}

Rekursion

In Kotlin ist wie in den meisten Programmiersprachen auch eine Schleife durch Rekursion möglich.

fun factorial(n: Long): Long = if (n == 0) 1 else n * factorial(n - 1)

println(factorial(10)) // 3628800

Im obigen Beispiel wird die factorial wiederholt von selbst aufgerufen, bis die angegebene Bedingung erfüllt ist.

Funktionale Konstrukte für die Iteration

Die Kotlin Standard Library bietet außerdem zahlreiche nützliche Funktionen für das iterative Arbeiten mit Sammlungen.

Mit der map kann beispielsweise eine Liste von Elementen umgewandelt werden.

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.map { "Number $it" }

Einer der vielen Vorteile dieses Stils ist es, Operationen auf ähnliche Weise zu verketten. Es wäre nur eine geringfügige Änderung erforderlich, wenn beispielsweise die Liste nach geraden Zahlen gefiltert werden müsste. Die filter kann verwendet werden.

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.filter { it % 2 == 0 }.map { "Number $it" }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow