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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow