La aleatoriedad no es caos: cómo Kotlin resuelve el problema de Stack Overflow
\n\nTodo 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\nEn 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\nFundamentos: Random en Kotlin
\n\nKotlin 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.
La forma más simple: Random.nextInt()
\n\nSi solo necesita un número entero aleatorio (de 0 al valor máximo de Int), use:
\n\nimport kotlin.random.Random\n\nfun main() {\n val randomNumber = Random.nextInt()\n println("Número aleatorio: $randomNumber")\n}\n\nCada 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\nval fromZeroToTen = Random.nextInt(10) // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14\n\nImportante: En Kotlin, como en Java, el límite superior no está incluido. Random.nextInt(10) devolverá un número del 0 al 9.\n\nNúmeros decimales: Random.nextDouble() y Random.nextFloat()
\n\nPara generar un float aleatorio en Kotlin o double, use:
\n\nval 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\nTenga en cuenta: nextFloat() no admite rangos, solo nextDouble(). Si necesita un float en un rango, conviértalo:
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()\n\nGeneración de números aleatorios en un rango: ejemplos prácticos
\n\nLa 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\nNúmero entero aleatorio del 1 al 100 (inclusive)
\n\nPara incluir el límite superior, simplemente sume 1:
\n\nval 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\nUna de las tareas más comunes es obtener un elemento aleatorio de una colección:
\n\nval colors = listOf("Rojo", "Azul", "Verde", "Amarillo")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Color aleatorio: $randomColor")\n\nPero en Kotlin hay una forma aún más elegante: la función random():
val randomColor = colors.random()\nprintln("Color aleatorio: $randomColor")\n\nInternamente hace lo mismo, pero el código queda más limpio.
\n\nNúmero aleatorio con paso
\n\nA 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\nfun 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\nTécnicas avanzadas: secuencias y criptoseguridad
\n\nSecuencia aleatoria de números
\n\nSi necesita generar una lista de números aleatorios, use generate