Obtener un número aleatorio en Kotlin

David Mbochi Njonge 20 junio 2023
  1. Usa la función de extensión random() de IntRange en Kotlin
  2. Usa random() con Range Inclusive en Kotlin
  3. Usa random() con Range Exclusive en Kotlin
  4. Usa la función de extensión shuffled() de Iterable en Kotlin
  5. Usa ThreadLocalRandom en Kotlin
  6. Conclusión
Obtener un número aleatorio en Kotlin

Un número aleatorio se genera a partir de un conjunto de números utilizando un algoritmo que garantiza que cada número tenga la misma probabilidad de ser generado.

Podemos generar diferentes tipos de tipos de datos además de números. Por ejemplo, podemos usar el método UUID.randomUUID() de java.util para generar una cadena aleatoria.

Esta característica de permitir que el desarrollador genere cadenas aleatorias es muy importante ya que ayuda a generar identificadores únicos para datos, generar contraseñas únicas y generar un identificador de seguimiento de pedidos en un entorno de comercio electrónico.

Este tutorial demostrará cómo podemos aprovechar para generar un número aleatorio usando Kotlin.

Usa la función de extensión random() de IntRange en Kotlin

Una función de extensión es una forma de agregar funcionalidad a una clase sin modificar el código existente ni utilizar patrones de diseño como el patrón de decorador.

Vaya al entorno de desarrollo de IntelliJ y seleccione Archivo > Nuevo > Proyecto. En la ventana que se abre, ingrese el nombre del proyecto como kotlin-random, seleccione Kotlin en la sección Idioma, seleccione Intellij en la sección Build System y finalmente presione el botón Crear. para generar un nuevo proyecto.

Usa random() con Range Inclusive en Kotlin

Cree un archivo Main.kt en la carpeta kotlin y copie y pegue el siguiente código en el archivo.

fun exampleOne(): Int{
   return (0..10).random();
}
fun main(){
    println("... Example One ...")
    println(exampleOne());
}

En este código, hemos creado un método llamado exampleOne() que devuelve un Int. El entero es generado aleatoriamente por la función random() en el método.

La función random() es una función de extensión de IntRange y devuelve un elemento generado aleatoriamente del rango proporcionado.

Si el rango está vacío, el método arroja una IllegalArgumentException. Un rango está vacío cuando el primer elemento del rango es mayor que el último elemento del rango.

La función random() utiliza la función de extensión nextInt() de Random detrás de escena para generar un número que se distribuye uniformemente dentro del rango proporcionado.

El número generado puede ser cualquier número del 0 al 10 inclusive. Si ejecuta el código anterior varias veces, notará que obtendrá cualquier número aleatorio en el rango.

Producción :

... Example One ...
3

Usa random() con Range Exclusive en Kotlin

Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt después de él.

fun exampleTwo(): Int{
    return (0 until  10).random();
}
fun main(){
    println("... Example Two ...")
    println(exampleTwo());
}

En el ejemplo anterior, usamos .. en el rango, que se usa para indicar el método rangeTo(). Sin embargo, en este ejemplo, hemos utilizado hasta, que denota la función de extensión Int.until().

Las funciones de extensión until() devuelven un rango desde el valor inicial hasta excluir el último valor proporcionado. El valor inicial a menudo se denota como “este” para indicar el valor actual sobre el que se actúa.

Si ejecuta el ejemplo anterior varias veces, notará que siempre se generará un número aleatorio, pero nunca se generará un valor de 10.

Producción :

... Example Two ...
5

Usa la función de extensión shuffled() de Iterable en Kotlin

La función shuffled() es una función de extensión de la interfaz Iterable y devuelve una Lista de elementos. La lista devuelta nos permite usar la función de extensión random() de la interfaz Collection para generar un número aleatorio.

Comente el ejemplo anterior y copie y pegue el siguiente código en el archivo Main.kt que se encuentra a continuación.

fun exampleThree(): Int{
  return (0..10).shuffled().random()
}
fun main(){
    println("... Example Three ...")
    println(exampleThree());
}

En este código, hemos creado un método llamado exampleThree() que devuelve un número entero generado en el método.

El rango de números de 0 a 10 se devuelve como una lista mezclada por la función shuffled(). Tenga en cuenta que el rango es inclusivo.

Si desea que el rango sea exclusivo, use la función Int.until(), como se explicó en el ejemplo anterior.

La función random() genera un número aleatorio de la lista barajada, y si la lista está vacía, la función lanza NoSuchElementException.

Si ejecuta este código varias veces, se generará un número aleatorio a partir de la lista mezclada para cada ejecución.

Producción :

... Example Three ...
7

Usa ThreadLocalRandom en Kotlin

El subproceso actual utiliza el ThreadLocalRandom para generar un número aleatorio. Este generador se usa principalmente en programas concurrentes para reducir la sobrecarga y la contención.

El generador se usa específicamente cuando diferentes programas acceden a números aleatorios en paralelo en grupos de subprocesos.

Cuando todos nuestros usos tienen la forma ThreadLocalRandom.current.nextX(), donde la X puede ser nextInt(), nextLong(), etc. Garantiza que un generador no se puede compartir entre varios subprocesos. .

El método current() es un método estático que devuelve un objeto de ThreadLocalRandom y solo puede ser invocado por el hilo actual.

Comente el código anterior y copie y pegue el siguiente código en el archivo Main.kt después de él.

import java.util.concurrent.ThreadLocalRandom

fun exampleFour(bound: Int): Int{
    return ThreadLocalRandom.current().nextInt(bound)
}
fun main(){
     println("... Example Four ...")
    println(exampleFour(9))
}

El método nextInt() genera un número pseudoaleatorio que se distribuye uniformemente entre 0 hasta pero excluyendo el número que proporcionamos como bound.

Si el límite no es positivo, el método lanza IllegalArgumentException. Si ejecuta el código anterior varias veces, obtendrá un número pseudoaleatorio diferente que se genera de manera uniforme.

Producción :

... Example Four ...
3

Conclusión

Este tutorial ha enseñado las diferentes formas en que podemos generar un número aleatorio en Kotlin, y los enfoques cubiertos incluyen:

  1. Usando la función de extensión random() de IntRange.
  2. Usando la función de extensión shuffled() de Iterable.
  3. Usando ThreadLocalRandom.

También aprendimos a modificar el rango generado para que sea inclusivo o exclusivo usando .. o hasta en el rango.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub