Zoeken…


Opmerkingen

In Kotlin worden lussen waar mogelijk geoptimaliseerd tot geoptimaliseerde lussen. Als u bijvoorbeeld over een nummerbereik itereert, wordt de bytecode gecompileerd tot een overeenkomstige lus op basis van eenvoudige int-waarden om de overhead van het maken van objecten te voorkomen.

Herhaal een actie x keer

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

Looping over iterables

Je kunt elke iterable herhalen met behulp van de standaard for-loop:

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

Veel dingen in Kotlin zijn iterabel, zoals nummerreeksen:

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

Als u een index nodig hebt tijdens het itereren:

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

Er is ook een functionele benadering van itereren opgenomen in de standaardbibliotheek, zonder duidelijke taalconstructies, met behulp van de functie forEach:

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

it in dit voorbeeld impliciet het huidige element, zie Lambda-functies

While Loops

While en do-while-loops werken zoals in andere talen:

while(condition) {
    doSomething()
}

do {
    doSomething()
} while (condition)

In de do-while-lus heeft het conditieblok toegang tot waarden en variabelen die in de lus worden aangegeven.

Breek en ga door

Breek en ga door met zoekwoorden werken zoals in andere talen.

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
    }
}

Als u geneste loops hebt, kunt u de loop-instructies labelen en de pauze bepalen en doorgaan-instructies om aan te geven welke lus u wilt voortzetten of breken:

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
    }
}

Deze benadering werkt echter niet voor het functionele voor forEach construct.

Itererend over een kaart 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")
}

Herhaling

Lus via recursie is ook mogelijk in Kotlin zoals in de meeste programmeertalen.

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

println(factorial(10)) // 3628800

In het bovenstaande voorbeeld wordt de factorial zelf herhaaldelijk aangeroepen totdat aan de gegeven voorwaarde is voldaan.

Functionele constructies voor iteratie

De Kotlin-standaardbibliotheek biedt ook tal van nuttige functies om iteratief aan collecties te werken.

Bijvoorbeeld, de map kan de functie worden gebruikt om een lijst van items te transformeren.

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

Een van de vele voordelen van deze stijl is dat hiermee bewerkingen op dezelfde manier kunnen worden gekoppeld. Er is slechts een kleine wijziging nodig als, zeg, de bovenstaande lijst moest worden gefilterd op even getallen. De filter kan worden gebruikt.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow