Números aleatorios con Xojo

Hasta hace relativamente poco tiempo, lo que teníamos a nuestra disposición para obtener números aleatorios era la conocida función rnd() que nos devolvía un número de tipo Double comprendido entre los valores 0 y 1. Este es, por otra parte, el mismo sistema que podemos encontrar en otros muchos lenguajes… especialmente los más pegados al hardware.

Mediante dicho sistema, si queríamos obtener por ejemplo un valor comprendido entre 0 y 100 tendríamos que multiplicar el valor devuelto por la función por el número enterno que exprese el límite superior del rango, así:

Dim r as integer = rnd() * 100
msgbox r.toText

Ahora bien, desde hace algunas rediciones ya tenemos la posibilidad de trabajar con números aleatorios de un modo más orientado a objetos, gracias precisamente a la clase Random. Eso sí, a diferencia de la función Rnd() que podemos utilizar siempre que deseemos, desde cualquier método, en el caso de Random es deseable que se cree una única instancia a lo largo de toda la ejecución del programa, obteniendo de este modo mejores resultados en su uso.

Por ejemplo, una buena forma de crear esta instancia única es mediante la creación de una Propiedad en el objeto App, y que podremos iniciar en el evento Open. De este modo, suponiendo que hayamos creado la propiedad con el nombre “aleatorio” y de tipo “Random”:

aleatorio = new Random

Posteriormente, desde cualquier punto de nuestra aplicación podemos obtener un número aleatorio a partir de dicha instancia utilizando, por ejemplo, el método que nos devuelve un valor comprendido entre los límites indicados por el valor suelo y el valor techo:

dim miNumero as Integer = app.aleatorio.inRange(0,100)
msgbox miNumero.toText

¡Así de sencillo! Por otra parte, en la clase Random también encontramos métodos que nos devuelven un valor tal y como lo haría la función Rnd(), inferior al techo que indiquemos y superior a cero, como por ejemplo:

app.aleatorio.lessThan(100)

O bien obtener un valor correspondiente a una distribución Gausiana (Normal) en vez de a una distribución uniforme.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *