Lazos y Operadores en Kotlin (Loops)

Jorge Rodriguez
2 min readFeb 2, 2018

--

En este tema no hablaremos sobre el lazo while porque es lo mismo que en Java.

Principalmente hablaremos del lazo for y los diferentes usos que se le puede dar.

Primero vamos a ver que es el operador rango (..), sí, los dos puntos seguidos forman un rango, como ejemplo:

val unoACien = 1..100

Crea un rango de números de uno a cien (incluido el cien). Ahora vamos a recorrer este rango:

for (i in unoACien) {
print(i)
}

Listo, de esta manera imprimes todos los elementos entre 1 y 100. Ahora imaginemos que solo quieres los números pares, en un rango del 100 al uno, es muy sencillo, lo puedes hacer así:

val cienAUno = 100 downTo 1

for (i in cienAUno step 2) {
println(i)
}

Si quieres iterar sobre una lista, podrías hacerlo de esta manera:

for (i in 0..colleccion.size() - 1) {
//cualquier cosa
}

En Kotlin solo existe el foreach, por tanto si queremos saber el índice de un elemento, existe una manera diferente de hacerlo, la cual es así:

var numeros = arrayListOf(10, 3, 5, 6, 7)for ((indice, numero) in numeros.withIndex()) {
println("$indice = $numero")
}

La salida que tendríamos sería esta:

0 = 10
1 = 3
2 = 5
3 = 6
4 = 7

Además de esto puedes hacer rangos de cualquier objeto que implemente la interfaz comparable. Por ejemplo con la clase Char:

for (letra in 'A'..'F') {
println(letra)
}

Esto va a imprimir las letras de la A a la F.

El operador in también lo puedes usar para realizar validaciones de si un elemento pertenece a un rango o a una colección:

fun esLetraMayuscula (letra:Char) = letra in 'A'..'Z'println(esLetraMayuscula('b')) //false
println(esLetraMayuscula('Q')) //true

Cabe recalcar que solo puedes hacer rangos de conjuntos finitos, por eso la clase String por ejemplo no puedes usarla como rango, pero igual puedes ver si un elemento está entre dos Strings:

fun estaElStringEnElRangoIndicado (cadena: String) = cadena in "Java" .. "Kotlin"println(estaElStringEnElRangoIndicado("Javascript")) //true
println(estaElStringEnElRangoIndicado("Python")) //false

También se puede usar el for, para recorrer mapas de una manera más sencilla. Veamos un ejemplo sencillo:

val mapaDeLetrasYSuIndice = TreeMap<Char, Int>()val charRange = 'A'..'Z'//Llenar el mapa
for ((indice, letra) in charRange.withIndex()) {
mapaDeLetrasYSuIndice[letra] = indice
}
//Imprimir los elementos del mapa
for ((letra, indice) in mapaDeLetrasYSuIndice) {
println("$letra está en el índice $indice")
}

Lo que hace este código es crear un mapa, lo llena con un for, ahí podemos notar lo fácil que es poner elementos en un mapa, ya no necesitamos un método put, sino algo parecido al manejo de arrays en Java.

Para recorrer el mapa, solo debes declarar la clave y el valor dentro de la firma del for y puedes usarlos dentro como quieras. Es bastante fácil.

Bueno, ahí te dejo algunos ejemplos de uso, espero haya sido de ayuda.

--

--

Jorge Rodriguez

Thoughtworker, me encanta programar y me gusta mucho Android! Apasionado por compartir y generar conocimiento en español.