Enumeraciones en Xojo

Hay ocasiones en las que un simple booleano nos sirve como testigo gracias a sus dos únicos valores soportados: verdadero o falso. En otros casos, sin embargo, precisamos que un tipo de dato sea capaz de contener cualquier valor de entre los previamente definidos, y aquí es donde las enumeraciones de Xojo valen su peso en oro.

En Xojo las enumeraciones son un tipo de dato y admiten sólo valores numéricos enteros durante su definición; lo que significa que no podemos crear enumeraciones de cadenas u otro tipo de dato primitivo, pese a que podamos llevarnos esa falsa impresión atendiendo a las opciones presentadas en el panel Inspector.

Adicionalmente, y tal y como ocurre con otra serie de elementos del lenguaje de programación Xojo, podemos crear enumeraciones sobre el elemento de clase que tengamos seleccionado en ese momento o bien como un componente más de un módulo.

Precisamente conviene tener en cuenta lo anterior para no llevarse sorpresas, dado que el compilador interpretará que dos enumeraciones creadas sobre diferentes clases o módulos serán tipos de datos distintos pese a que tengan el mismo nombre.

Crear una enumeración en Xojo

Para crear una enumeración en Xojo podemos seleccionar Insert > Enumeration. Dicha acción insertará un nuevo elemento de enumeración seleccionado en el Navegador de Proyecto y nos dará acceso al panel de Propiedades, donde podremos asignar el nombre que deseamos dar al nuevo tipo de dato, así como su ámbito (recuerda que si está definido como Public, este será accesible desde cualquier parte del proyecto utilizando la notación por punto).

Enumeration creation in Xojo

Una vez insertada la enumeración, lo siguiente que haremos será asignar los posibles diferentes valores quer tendrá dicha enumeración mediante la creación de tantas etiquetas como deseemos. Para ello, y con el elemento de enumeración seleccionado en el Navegador de Proyecto, tendremos en el área central acceso al Editor, donde se mostrará en la franja superior el nombre del tipo de dato Enumerador, y justo bajo ella la etiqueta Declaration.

Haz clic sobre el botón “+” para insertar nuevas entradas. Por ejemplo, en la siguiente imagen puedes ver las declaraciones realizadas para un tipo de dato Enumerador PuntosCardinales:

Xojo Enumerator Declaration

Si no asignamos ningún valor, Xojo los asignará por omisión de forma incremental partiendo de 0. Así, en el ejemplo mostrado los valores serían los siguientes:

norte = 0
sur = 1
este = 2
oeste = 3

Sin embargo, podemos optar por asignar el valor que deseemos a cada una de las etiquetas declaradas y tampoco es preciso que estos deban de ser consecutivos. Eso sí, las siguientes etiquetas que no tengan valor tomarán el incremental del último asignado.

Por otra parte, y aunque te pueda resultar paradójico, lo cierto es que si bien declaramos el tipo del Enumerador como entero y asignamos valores enteros a cada una de las etiquetas del enumerador… ¡no podemos asignar el valor subyacente de una etiqueta de tipo de dato enumerador sobre una variable de tipo entero directamente! Es decir, lo siguiente producirá un error de compilador:

dim entero as integer

entero = posicion.norte

Para poder hacerlo, tendremos que hacer un cast (proyección de tipo) del valor original a entero:

entero = integer(posicion.norte)

Ventajas de los Enumeradores

El primero de los motivos es evidente, ya que nos permite recoger varios valores (o posibles valores) a utilizar durante las comprobaciones o asignaciones, además de poder hacerlo de un modo más claro y evidente en comparación con el uso de valores numéricos sin significado aparente.

Pero lo cierto es que los enumeradores también suponen una excelente oportunidad de detectar fallos durante la compilación de nuestros proyectos, puesto que si por ejemplo intentamos pasar un valor no existente o admitido por la enumeración, el compilador nos lo hará saber y detectaremos por tanto el fallo… en vez de esperar a que este se pueda propudir en tiempo de ejecución.

Deja un comentario

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