Las clases son la base de la programación orientada a objetos (OOP); después de todo son las encargadas de proporcionar una funcionalidad de forma completamente encapsulada. En este ejemplo básico puedes ver de qué modo tan sencillo puedes crear una clase que nos permita obtener una serie de números aleatorios únicos en un Array. Además, podremos pasar como parámetros tanto el valor máximo como la cantidad de números aleatorios únicos que deseamos obtener.
Puedes descargar la clase junto con el proyecto de ejemplo que muestra su uso desde este enlace.
UniqueRandomGenerator
La clase es tan parca que sólo requiere de un constructor, encargado de recibir como argumentos el número que indique el valor máximo del rango y también la cantidad de valores únicos que deseamos generar. Dichos argumentos quedan almacenados en un par de propiedades de ámbito Privado (lo que significa que no pueden ser consultadas directamente por cualquier miembro ajeno a la clase), así como una tercera propiedad (también de ámbito privado) que será el Diccionario encargado de guardar los valores.
¿Por qué utilizar un Diccionario en vez de un Array o alguna otra estructura del lenguaje? La motivación de utilizar un Diccionario reside en el hecho de que facilita enormemente la creación de tantos valores únicos como deseemos basándonos para ello en la Key, y estableciendo un bucle del tipo While… Wend. Esto es más rápido que si tuviésemos que iterar por una matriz para comprobar que un nuevo valor obtenido de forma aleatorio no se haya comprendido ya entre los obtenidos previamente. Otra consecuencia bastante buena es que al iterar el Diccionario para obtener el Array que devolveremos finalmente los resultados ya estarán ordenados de forma natural, realizando sólo un Shuffle en aquellos casos en los que el consumidor de la clase lo exprese de forma explícita.
Por último, el segundo de los métodos de la clase aparte del Constructor es el método Get. Dicho método recibirá como parámetro un booleano que indicará si el consumidor de la clase desea los números aleatorios de forma ordenada (true
) o desordenada (false
). El método Get devolverá, por tanto, un Array de tipo Integer().
El código del Constructor es el siguiente:
max = limit
dimension = count
numbers = new Xojo.Core.Dictionary
Mientras que el código del método Get es el siguiente:
dim rnd as new Random
dim i as integer
While numbers.Count <> dimension
i = rnd.InRange(0,max)
numbers.Value(i) = i
Wend
dim result() as integer
for each n as Xojo.Core.DictionaryEntry in numbers
result.Append n.Value
next
if shuflfe then result.Shuffle
Return result
*Esta entrada ha sido creada con Snippery utilizando el lenguaje Markdown y exportándola posteriormente como HTML para su inclusión en este artículo de AprendeXojo.com