0Pricing
Kotlin Academy · Lección

Rangos de Char y personalizados

Más allá de los enteros

Rangos de Char y personalizados es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Más allá de los enteros

Los rangos no son exclusivos de Int. Kotlin admite rangos de caracteres y de otros tipos comparables.

En esta lección explorará los rangos de caracteres y cómo los tipos personalizados pueden participar mediante rangeTo.

Recapitulación de los rangos de caracteres

Los caracteres tienen un orden definido, por lo que 'a'..'z' es un rango válido.

Puede iterar sobre ellos, comprobar la pertenencia y mucho más.

fun main() {
    for (c in 'a'..'f') print(c)
    println()
    println('q' in 'a'..'z')
}

Validar caracteres

Los rangos de caracteres hacen más legible la validación de entradas, por ejemplo, al comprobar si son dígitos o letras.

fun isDigit(c: Char): Boolean = c in '0'..'9'

fun main() {
    println(isDigit('7'))
    println(isDigit('x'))
}

Contar letras

Puede crear rápidamente un alfabeto recorriendo un rango de caracteres y recopilando sus valores.

fun main() {
    val alphabet = ('a'..'z').toList()
    println(alphabet.size)
    println(alphabet.first())
    println(alphabet.last())
}

Rangos de Long

Los rangos también funcionan con Long, lo que resulta útil para intervalos numéricos grandes.

Se aplican los mismos operadores.

fun main() {
    val big = 1L..5L
    println(big.sum())
}

Rangos de tipos comparables

Cualquier tipo Comparable puede formar un rango con .., aunque esos rangos solo permiten comprobar la pertenencia, no iterar.

Por ejemplo, los rangos de String comprueban el orden lexicográfico.

fun main() {
    val range = "apple".."mango"
    println("cherry" in range)
    println("zebra" in range)
}

Por qué algunos rangos no se pueden recorrer

Para iterar se necesita un paso definido. Los enteros y los caracteres tienen uno (sumar 1), pero las cadenas y los valores de tipo double no tienen un siguiente valor evidente.

Por eso esos rangos admiten in, pero no los bucles for.

fun main() {
    val r = 1.0..5.0
    println(2.5 in r)
    // for (x in r) // not allowed for Double
}

Tipos personalizados con rangeTo

El operador .. llama a una función rangeTo. Si su clase implementa Comparable, obtiene la comprobación de pertenencia automáticamente.

Aquí se muestra una clase sencilla de versiones que compara valores numéricamente.

data class Ver(val n: Int) : Comparable<Ver> {
    override fun compareTo(other: Ver) = n - other.n
}

fun main() {
    val range = Ver(1)..Ver(5)
    println(Ver(3) in range)
    println(Ver(9) in range)
}

El operador entre bastidores

Escribir a..b equivale a llamar a a.rangeTo(b).

La forma de operador es simplemente una sintaxis más cómoda para la misma función.

fun main() {
    val r1 = 1..5
    val r2 = 1.rangeTo(5)
    println(r1.toList() == r2.toList())
}

Elegir el rango adecuado

Orientación rápida:

  • Números y caracteres → iterar y comprobar
  • Valores double y tipos comparables personalizados → comprobar la pertenencia únicamente
  • ¿Necesita un paso? Aténgase a las progresiones de enteros o caracteres
fun main() {
    println('m' in 'a'..'z')
    println(3.5 in 1.0..4.0)
    println(50 in 1..100)
}

Todo junto

Los rangos se generalizan para muchos tipos:

  • Los rangos de caracteres permiten iterar y validar
  • Los rangos de Long gestionan intervalos grandes
  • Los tipos comparables y personalizados admiten la comprobación de pertenencia
  • .. es una forma abreviada de rangeTo
fun main() {
    val vowels = "aeiou"
    for (c in 'a'..'z') {
        if (c in vowels) print(c)
    }
    println()
}

Comprobación rápida

Compruebe cuánto ha entendido sobre los rangos de caracteres y personalizados.

Recapitulación

Ha aprendido sobre los rangos de caracteres y personalizados:

  • Los rangos de caracteres y de Long se pueden recorrer como los de Int
  • Los tipos Comparable admiten la comprobación de pertenencia mediante ..
  • Los tipos no discretos permiten comprobar in, pero no se pueden recorrer con un bucle
  • .. es una forma abreviada de rangeTo

Con esto termina el curso Rangos y Progresiones.

Preguntas frecuentes

¿La lección «Rangos de Char y personalizados» es gratis?

Sí — el texto completo de «Rangos de Char y personalizados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Rangos de Char y personalizados»?

Más allá de los enteros Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Rangos de Char y personalizados»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Operadores de rangos
  2. step y downTo
  3. Rangos en bucles
  4. Rangos de Char y personalizados
← Volver a Kotlin Academy