Cómo obtener un número aleatorio en Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

La aleatoriedad no es caos: cómo Kotlin resuelve el problema de Stack Overflow

\n\n

Todo desarrollador ha escrito código para generar un número aleatorio al menos una vez en su vida. Parece sencillo, ¿verdad? Pero cuando esta pregunta se hace en Stack Overflow (y la pregunta "How can I get a random number in Kotlin?" acumula miles de visitas), queda claro que hay más dificultades de las que parecen. Especialmente si vienes de Java o Python.

\n\n

En este artículo, analizaremos la generación de números aleatorios en Kotlin desde técnicas simples hasta avanzadas. Aprenderá cómo obtener un número entero aleatorio, un número decimal, cómo establecer un rango e incluso cómo generar un random criptográficamente seguro para seguridad. ¡Vamos allá!

\n\n

Fundamentos: Random en Kotlin

\n\n

Kotlin no tiene su propia clase separada para random: utiliza el potente java.util.Random de Java, pero con una sintaxis mucho más conveniente. Gracias a las funciones de extensión, escribir código Kotlin random se puede hacer literalmente en una línea.

\n\n

La forma más simple: Random.nextInt()

\n\n

Si solo necesita un número entero aleatorio (de 0 al valor máximo de Int), use:

\n\n
import kotlin.random.Random\n\nfun main() {\n    val randomNumber = Random.nextInt()\n    println("Número aleatorio: $randomNumber")\n}
\n\n

Cada ejecución dará un nuevo valor. Pero la mayoría de las veces necesitamos limitar el rango. Para eso existe una versión sobrecargada:

\n\n
val fromZeroToTen = Random.nextInt(10)   // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14
\n\n
Importante: En Kotlin, como en Java, el límite superior no está incluido. Random.nextInt(10) devolverá un número del 0 al 9.
\n\n

Números decimales: Random.nextDouble() y Random.nextFloat()

\n\n

Para generar un float aleatorio en Kotlin o double, use:

\n\n
val randomDouble = Random.nextDouble()   // 0.0..1.0\nval randomFloat = Random.nextFloat()     // 0.0..1.0\n\n// Con rango:\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0
\n\n

Tenga en cuenta: nextFloat() no admite rangos, solo nextDouble(). Si necesita un float en un rango, conviértalo:

\n\n
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()
\n\n

Generación de números aleatorios en un rango: ejemplos prácticos

\n\n

La mayoría de las veces en proyectos reales se necesita un número aleatorio en un rango específico en Kotlin. Analicemos los escenarios más populares.

\n\n

Número entero aleatorio del 1 al 100 (inclusive)

\n\n

Para incluir el límite superior, simplemente sume 1:

\n\n
val diceRoll = Random.nextInt(1, 7)  // 1..6 (como un dado)\nval lottery = Random.nextInt(1, 101) // 1..100
\n\n

Índice aleatorio de un array o lista

\n\n

Una de las tareas más comunes es obtener un elemento aleatorio de una colección:

\n\n
val colors = listOf("Rojo", "Azul", "Verde", "Amarillo")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Color aleatorio: $randomColor")
\n\n

Pero en Kotlin hay una forma aún más elegante: la función random():

\n\n
val randomColor = colors.random()\nprintln("Color aleatorio: $randomColor")
\n\n

Internamente hace lo mismo, pero el código queda más limpio.

\n\n

Número aleatorio con paso

\n\n

A veces es necesario generar números que sean múltiplos de un valor específico. Por ejemplo, números pares del 0 al 100:

\n\n
fun randomEven(max: Int): Int {\n    val half = max / 2\n    return Random.nextInt(0, half + 1) * 2\n}\n\nprintln(randomEven(100)) // 0, 2, 4, ..., 100
\n\n

Técnicas avanzadas: secuencias y criptoseguridad

\n\n

Secuencia aleatoria de números

\n\n

Si necesita generar una lista de números aleatorios, use generate

Blogs

Book Recommendations