Kotlin
Loop in Kotlin
Ricerca…
Osservazioni
In Kotlin, i loop vengono compilati in loop ottimizzati, laddove possibile. Ad esempio, se si esegue iterazione su un intervallo numerico, il bytecode verrà compilato in un ciclo corrispondente basato su valori int interi per evitare il sovraccarico della creazione dell'oggetto.
Ripeti un'azione x volte
repeat(10) { i ->
println("This line will be printed 10 times")
println("We are on the ${i + 1}. loop iteration")
}
In loop su iterables
Puoi eseguire il loop su qualsiasi iterable usando il ciclo for standard:
val list = listOf("Hello", "World", "!")
for(str in list) {
print(str)
}
Un sacco di cose in Kotlin sono iterabili, come gli intervalli di numeri:
for(i in 0..9) {
print(i)
}
Se è necessario un indice durante l'iterazione:
for((index, element) in iterable.withIndex()) {
print("$element at index $index")
}
Esiste anche un approccio funzionale all'iterazione incluso nella libreria standard, senza costrutti del linguaggio apparente, utilizzando la funzione forEach:
iterable.forEach {
print(it.toString())
}
it
in questo esempio tiene implicitamente l'elemento corrente, vedi funzioni lambda
Mentre cicli
I cicli while e do-while funzionano come fanno in altre lingue:
while(condition) {
doSomething()
}
do {
doSomething()
} while (condition)
Nel ciclo do-while, il blocco delle condizioni ha accesso ai valori e alle variabili dichiarate nel corpo del ciclo.
Rompi e continua
Rompere e continuare le parole chiave funzionano come fanno in altre lingue.
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
}
}
Se hai loop nidificati, puoi etichettare le istruzioni loop e qualificare le istruzioni break e continue per specificare il ciclo che vuoi continuare o interrompere:
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
}
}
forEach
, questo approccio non funzionerà per il costrutto funzionale forEach
.
Iterare su una mappa 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")
}
ricorsione
Il looping tramite ricorsione è anche possibile in Kotlin come nella maggior parte dei linguaggi di programmazione.
fun factorial(n: Long): Long = if (n == 0) 1 else n * factorial(n - 1)
println(factorial(10)) // 3628800
Nell'esempio sopra, la funzione factorial
sarà chiamata ripetutamente da sola fino a quando non viene soddisfatta la condizione data.
Costrutti funzionali per l'iterazione
La Kotlin Standard Library fornisce anche numerose utili funzioni per lavorare in modo iterativo sulle raccolte.
Ad esempio, la funzione map
può essere utilizzata per trasformare un elenco di elementi.
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.map { "Number $it" }
Uno dei molti vantaggi di questo stile è che consente di concatenare le operazioni in modo simile. Sarebbe necessaria solo una piccola modifica se, per esempio, la lista sopra fosse necessaria per essere filtrata per i numeri pari. La funzione filter
può essere utilizzata.
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.filter { it % 2 == 0 }.map { "Number $it" }