Kotlin
Loops i Kotlin
Sök…
Anmärkningar
I Kotlin sammanställs slingor till optimerade slingor där så är möjligt. Om du till exempel itererar över ett talintervall kommer bytekoden att kompileras ner till en motsvarande slinga baserad på vanliga int-värden för att undvika omkostnaderna för objektskapning.
Upprepa en åtgärd x gånger
repeat(10) { i ->
println("This line will be printed 10 times")
println("We are on the ${i + 1}. loop iteration")
}
Looping över iterables
Du kan slinga över alla iterable med standard för-loop:
val list = listOf("Hello", "World", "!")
for(str in list) {
print(str)
}
Många saker i Kotlin är iterable, som antal intervall:
for(i in 0..9) {
print(i)
}
Om du behöver ett index medan du itererar:
for((index, element) in iterable.withIndex()) {
print("$element at index $index")
}
Det finns också ett funktionellt tillvägagångssätt för iterering som ingår i standardbiblioteket, utan synliga språkkonstruktioner, med funktionen forEach:
iterable.forEach {
print(it.toString())
}
it
i detta exempel innehåller implicit det aktuella elementet, se Lambdafunktioner
Medan Loops
Loops medan och gör-medan fungerar som på andra språk:
while(condition) {
doSomething()
}
do {
doSomething()
} while (condition)
I do-while-slingan har tillståndsblocket tillgång till värden och variabler som deklareras i slingkroppen.
Bryt och fortsätt
Bryt och fortsätt sökord fungerar som på andra språk.
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
}
}
Om du har kapslade öglor kan du märka slinganalyserna och kvalificera brott- och fortsättningsuppsättningarna för att ange vilken slinga du vill fortsätta eller bryta:
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
}
}
Detta tillvägagångssätt fungerar dock inte för det funktionella för forEach
konstruktion.
Iterating över en karta i 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
Looping via rekursion är också möjligt i Kotlin som på de flesta programmeringsspråk.
fun factorial(n: Long): Long = if (n == 0) 1 else n * factorial(n - 1)
println(factorial(10)) // 3628800
I exemplet ovan kommer factorial
att kallas upp flera gånger av sig själv tills det givna villkoret är uppfyllt.
Funktionella konstruktioner för iteration
Kotlin Standard Library erbjuder också många användbara funktioner för att iterativt arbeta med samlingar.
Till exempel map
kan funktionen användas för att omvandla en lista med objekt.
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.map { "Number $it" }
En av de många fördelarna med denna stil är att det gör det möjligt att kedja verksamheter på liknande sätt. Endast en mindre modifiering skulle krävas om säga, listan ovan behövde filtreras för jämna nummer. filter
kan användas.
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.filter { it % 2 == 0 }.map { "Number $it" }