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