Rangos En Kotlin

ANUNCIO
Loading...

En este tutorial aprenderás sobre el uso de Rangos en Kotlin para iterar sobre subconjuntos de elementos. A lo largo del contenido verás que es un rango, como crearlos, el uso de funciones para alterar recorridos en bucles for.

Crear Rangos En Kotlin

Un rango es la representación del concepto matemático de intervalo de valores. Es decir, es un subconjunto de elementos comprendidos entre un extremo inferior a y un extremo superior b.

Por ejemplo, el rango [0,5] representa los valores enteros del 0 al 5. Para crearlo en Kotlin usas la función operador toRange() desde el extremo inferior y pasas como argumento el extremo superior:

fun main() { val fromZeroToFive = 0.rangeTo(5) println(fromZeroToFive) // 0..5 }
Lenguaje del código: Kotlin (kotlin)

Sin embargo, es mucho más legible si usas la forma de construcción semántica con dos puntos seguidos (a..b) para reemplazar a toRange().

println(0..5) // 0..5
Lenguaje del código: Kotlin (kotlin)

Si quieres determinar si un elemento se encuentra dentro de un rango usa el operador in.

fun main() { println(5 in 1..10) // true println(',' in 'a'..'z') // false fun isInDomain(value: Double): Boolean { val lowerEndpoint = -2.0..0.0 val upperEndpoint = 0.5..1.0 return value in lowerEndpoint && value in upperEndpoint } println(isInDomain(0.4)) // false }
Lenguaje del código: Kotlin (kotlin)

La Interfaz CloseRanged

El diseño para los rangos se establece en la interfaz CloseRanged<T>. Este tipo modela intervalos cerrados, es decir, los extremos se incluyen como parte del subconjunto.

interface ClosedRange<T : Comparable<T>>
Lenguaje del código: Kotlin (kotlin)

Dichos extremos son representados por las propiedades start y endInclusive.

Existen clases que representan rangos para los tipos básicos como IntRange, LongRange, CharRange y ClosedFloatPointRange. Cada uno de ellos implementa a CloseRanged.

1..100 // [1,100] IntRange 1L..99L // [1,99] LongRange 'a'..'z' // ['a','z'] CharRange 0.5..1.2 // [0.5, 1.2] ClosedFloatingPointRange
Lenguaje del código: Kotlin (kotlin)

Sin embargo ya que rangeTo() es una función de extensión de Comparable, puedes crear un rango a partir de las clases que implementen ese tipo, como algunas de la librería estándar o las tuyas propias.

"Carla".."Sebastián" // ClosedRanged<String>
Lenguaje del código: Kotlin (kotlin)

En el ejemplo anterior creamos un rango de strings porque String implementa a Comparable. Esto permite usar su lógica de comparación para determinar la existencia de un valor entre ambos.

En este caso sería en el ordenamiento alfabético el ítem se encuentra después que "Carla" y antes que "Sebastián". Por ejemplo, "Pedro" pertenecería al rango ya que coincide con esta condición.

fun main() { val clients = "Carla".."Sebastián" print("Pedro" in clients) // true }
Lenguaje del código: Kotlin (kotlin)

Usar Rangos En Bucle for

Es posible iterar a través de un rango en el bucle for al escribir la comprobación con in en su sintaxis.

Por ejemplo, si necesitamos imprimir el rango de la función f(x)= x2+2x-1 con el dominio [1, 10]:

fun main() { for (i in 1..10) { println(i * i + 2 * i - 1) } }
Lenguaje del código: Kotlin (kotlin)

Salida:

2 7 14 23 34 47 62 79 98 119

La Función step()

Retorna una progresión con en el mismo rango para ser recorrido con en el incremento pasado como argumento.

Por ejemplo, si desearas iterar de 2 en 2 en el rango 1..10 usarías step así:

fun main() { for(i in 1..10 step 2){ print(i) // 13579 } }
Lenguaje del código: Kotlin (kotlin)

Se imprimen los números desde el 1 y los elementos subsecuentes cuya diferencia sea 2.

La Función until()

Si deseas crear un rango semiabierto que excluya el límite superior, crealo usando la función until desde el límite inferior y pasando como argumento al extremo derecho.

Por ejemplo, creemos el rango [0,5):

fun main() { for(i in 0 until 5){ print(i) // 01234 } }
Lenguaje del código: Kotlin (kotlin)

Esto excluirá la iteración del número 5 del bucle for.

La Función downTo()

Te permite crear una progresión que sea recorrida desde el extremo superior hacia el extremo inferior.

Por ejemplo, iterar en orden inverso el rango [20,30]:

fun main() { for(i in 30 downTo 20){ println(i) } }
Lenguaje del código: Kotlin (kotlin)

Salida:

30 29 28 27 26 25 24 23 22 21 20

¿Ha sido útil esta publicación?