Buscar..


Observaciones

En Kotlin, los bucles se compilan en bucles optimizados siempre que sea posible. Por ejemplo, si recorre un rango de números, el código de bytes se compilará en un bucle correspondiente basado en valores int simples para evitar la sobrecarga de creación de objetos.

Repetir una acción x veces.

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

Bucle sobre iterables

Puede realizar un bucle sobre cualquier iterable utilizando el bucle for estándar:

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

Muchas cosas en Kotlin son iterables, como rangos de números:

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

Si necesita un índice mientras está iterando:

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

También hay un enfoque funcional para iterar incluido en la biblioteca estándar, sin construcciones de lenguaje aparentes, utilizando la función forEach:

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

it en este ejemplo dispone implícitamente el elemento actual, ver las funciones lambda

Mientras bucles

Los bucles while y do-while funcionan como lo hacen en otros idiomas:

while(condition) {
    doSomething()
}

do {
    doSomething()
} while (condition)

En el bucle do-while, el bloque de condición tiene acceso a valores y variables declarados en el cuerpo del bucle.

Romper y continuar

Romper y continuar las palabras clave funcionan como lo hacen en otros idiomas.

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

Si tiene bucles anidados, puede etiquetar las sentencias de bucle y calificar las sentencias de interrupción y continuación para especificar qué bucle desea continuar o dividir:

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

Sin embargo, este enfoque no funcionará para la construcción funcional forEach .

Iterando sobre un mapa en 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")
}

Recursion

También es posible realizar bucles a través de la recursión en Kotlin como en la mayoría de los lenguajes de programación.

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

println(factorial(10)) // 3628800

En el ejemplo anterior, la función factorial se llamará repetidamente por sí misma hasta que se cumpla la condición dada.

Construcciones funcionales para iteración.

La biblioteca estándar de Kotlin también proporciona numerosas funciones útiles para trabajar iterativamente sobre colecciones.

Por ejemplo, la función de map se puede utilizar para transformar una lista de elementos.

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

Una de las muchas ventajas de este estilo es que permite encadenar operaciones de manera similar. Solo se requeriría una pequeña modificación si, por ejemplo, la lista anterior fuera necesaria para ser filtrada para números pares. La función de filter puede ser utilizada.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow