Los rangos en Kotlin son un tipo de iterador que sirven sobre todo en los ciclos.
Un rango se define usando los dos puntos ..
y va de un punto a otro. Puede avanzar por pasos y puede ser invertido.
Podemos definir un rango de números:
val rangoDeNumeros = 1..5
Ahora el rango irá desde el 1 hasta el 5. Podemos iterarlo en un ciclo for.
val rangoDeNumeros = 1..5
for (numero in rangoDeNumeros) {
println(numero)
}
También se pueden definir rangos de caracteres o letras (y las mismas pueden ser mayúsculas):
val rangoDeLetras = 'a'..'l'
for (letra in rangoDeLetras) {
println("Rango de letras de menor a mayor: $letra")
}
De la misma manera, se puede con otro tipo de caracteres, por ejemplo los ascii:
val rangoDeCaracteres = '@'..'z'
for (letra in rangoDeCaracteres) {
println("Tengo un caracter: $letra")
}
La regla aquí es que el inicio del rango debe ser menor o igual que el fin del mismo. Por ejemplo, lo siguiente no es inválido pero crea un rango vacío:
val rangoInvalido = 10..1
En un momento veremos cómo hacer los rangos inversos
No podemos crear rangos al revés o invertidos, pero sí podemos invertir a un rango ya creado usando reversed
. Por ejemplo:
// No se pueden crear rangos de mayor a menor, pero
// sí se puede invertir uno
val rangoDeLetrasInvertido = ('a'..'z').reversed()
for (letra in rangoDeLetrasInvertido) {
println("Rango de letras de mayor a menor: $letra")
}
En este caso estamos encerrando el rango entre paréntesis para separar las expresiones.
Igualmente puede crearse un rango invertido a partir de uno ya existente:
val rangoDeLetras = 'a'..'l'
val unRangoInvertido = rangoDeLetras.reversed()
En Kotlin se pueden crear rangos que avancen determinados pasos en cada iteración, no solo uno.
Por ejemplo, el siguiente rango va a ir del -10 al 100 (sí, se puede comenzar en números negativos) en pasos de 2.
Va a comenzar en -10, luego irá a -8, -6, etcétera:
// Podemos avanzar por pasos, y sí, usar negativos
val otroRangoDeNumeros = (-10..100).step(2)
for (numero in otroRangoDeNumeros) {
println("Número en pasos de 2: $numero")
}
En este caso el paso es de 2; puede ser de 3, 4, etcétera.
Podemos usar el operador in (aparte de para recorrer) para saber si un elemento está dentro de un rango:
val rangoDeLetrasMayusculas = 'A'..'L'
if ('F' in rangoDeLetrasMayusculas) {
println("La letra F existe")
}
Lo mismo pasa con los otros tipo de datos.
Para resumir todo lo explicado sobre los rangos en Kotlin podemos ver el siguiente código:
fun main(argumentos: Array<String>) {
// Rangos en Kotlin
// By parzibyte
// https://parzibyte.me/blog
val rangoDeNumeros = 1..5
for (numero in rangoDeNumeros) {
println(numero)
}
val rangoDeLetras = 'a'..'l'
for (letra in rangoDeLetras) {
println("Rango de letras de menor a mayor: $letra")
}
val rangoDeLetrasMayusculas = 'A'..'L'
for (letra in rangoDeLetrasMayusculas) {
println("Tengo una letra mayúscula: $letra")
}
if ('F' in rangoDeLetrasMayusculas) {
println("La letra F existe")
}
val rangoDeCaracteres = '@'..'z'
for (letra in rangoDeCaracteres) {
println("Tengo un caracter: $letra")
}
// No se pueden crear rangos de mayor a menor, pero
// sí se puede invertir uno
val rangoDeLetrasInvertido = ('a'..'z').reversed()
for (letra in rangoDeLetrasInvertido) {
println("Rango de letras de mayor a menor: $letra")
}
// Podemos avanzar por pasos, y sí, usar negativos
val otroRangoDeNumeros = (-10..100).step(2)
for (numero in otroRangoDeNumeros) {
println("Número en pasos de 2: $numero")
}
// Los pasos también funcionan con otros rangos
val otroRangoDeLetras = ('o'..'r').step(3)
for (letra in otroRangoDeLetras) {
println("Letra en pasos de 3: $letra")
}
}
Puedes ejecutarlo en el Playground.
En este post te enseñaré a imprimir la letra ñ en una impresora térmica. Voy…
En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Esta web usa cookies.