Kotlin
Schleifen in Kotlin
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" }