Escribe tu búsqueda

Xojo: Pairs, parejas de datos

Compartir

Llegamos al último de los tipos de datos que revisamos bajo el apartado de colecciones; y si bien los anteriores Array, Collection y Dictionary suponían evoluciones (especialmente los dos últimos entre sí), el tipo de dato Pair no tiene nada que ver con los anteriores, y tampoco resulta tan ambicioso en cuanto a sus posibilidades.

Aún así, resulta una pieza muy importante que nos permitirá crear listas enlazadas con mayor comodidad o bien estructuras como árboles. Después de todo, esto es lo que ocurre tal y como vimos al hablar de las Collection, donde el tipo de dato Pair aparecía en su estructura interna.

Ahora bien, a diferencia de los anteriores donde teníamos a nuestra disposición una buena cantidad de métodos para trabajar con los datos almacenados en la colección, en el caso del tipo de dato Pair se limita a proporcionarnos un par de Propiedades junto con un método constructor.

En cuanto a las propiedades propiamente dichas, estas no pueden ser más descriptivas: ‘Left’ y ‘Right’, describiendo así la posición que ocupa cada uno de los valores que asignaremos siguiendo la estructura clave : valor que ya hemos visto tanto en el caso de las Collection como de los Diccionarios. Por otra parte, cuando utilizamos el constructor estaremos asignando los valores sobre dichas propiedades en el momento de la creación del objeto. Por tanto, lo siguiente sería válido:

Dim p as New Pair("Nombre", "Javier Rodriguez")

Dim p as Pair = "Nombre" : "Javier Rodriguez"

Lo que no podemos hace en ningún caso es la asignación utilizando le símbolo de igualdad (‘=’), pues obtendríamos un mensaje de error “No se puede asignar un valor a esta propiedad”. Prueba lo siguiente:

Dim p as Pair

p.Left = "Nombre"

p.right = "Javier Rodriguez"

Es decir, solo es posible asignar valores en el momento de su definición o creación del nuevo objeto. Sin embargo, el tipo de dato Pair también tiene otra capacidad más que interesante, y a la que ya hacíamos referencia anteriormente: supone el mejor modo de elaborar estructuras en árbol, dado que la asignación no se limita al uso de dos único valores. Por ejemplo, la siguiente instrucción:

Dim p as Pair = 1:2:3:4

 

 
 

Producirá internamente la estructura de árbol que se puede ver en la imagen y que también puedes apreciar definiendo un punto de parada en el proyecto y consultando posteriormente el contenido de la variable en la ventana del depurador (columna inferior derecha).

 
 

En este caso verás que la rama izquierda tiene definido, efectivamente, el valor numérico ‘1’, mientras que en la rama derecha se ha creado y asignado automáticamente otro Pair. Puedes continuar revisando así todos los contenidos de la jerarquía. Puedes preguntarte por qué la ventana del depurador muestra dos propiedades por cada una de las ramas (‘Left’ y ‘mLeft’, ‘Right’ y ‘mRight’). ¿Te aventuras con la respuesta? Pista: Propiedades computadas.

A todo esto, si bien estamos utilizando valores numéricos en todos nuestros ejemplos, una de las virtudes del tipo de dato Pair que lo hace especialmente potente es que sus propiedades admiten cualquier tipo de dato permitido por Xojo. Por tanto, como buenas propiedades Variantes (http://docs.xojo.com/index.php/Variant) podemos asignar también cadenas, valores booleanos, otros objetos, etc.

De hecho, si posteriormente deseamos recuperar cualquiera de los valores almacenados en las propiedades de un Pair bajo un tipo de dato concreto, sólo tendremos que especificarlo. Por ejemplo:

dim miImagen as picture = new picture(200,200,32)

Dim p as Pair = "imagen" : miImagen

msgBox p.left.stringValue // también es válido p.left

dim imagen as picture = p.right

Ten por seguro que Xojo hará todo lo posible por hacer un ‘cast’ del valor contenido en la propiedad al esperado por la variable a la que se esté asignando. De lo contrario obtendremos un error de compilación o, si es en tiempo de ejecución, tendremos un problema aun mayor.

Para subsanarlo, tenemos a nuestra disposición las comodidades proporcionadas por las Variantes. Se trata de la propiedad Type y que podemos comparar con cualquiera de los posibles valores. De este modo, antes de actuar en un sentido u otro durante nuestro código durante los Pair creados en tiempo de ejecución, podremos realizar las comparaciones oportunas para asegurarnos de no cometer un error grave. Por ejemplo

dim p as pair = "Rojo" : RGB(255,0,0)

dim c as color

if p.right.Type = Variant.TypeColor then

c = p.right

else

c = RGB(0,0,0)

end

¿Te aventuras a decir cuál será el color asignado a la variable ‘c’? ¿rojo o negro? Introduce el código en el editor de código de Xojo, ejecuta el programa y compruébalo por ti mismo.

Y recuerda que lo anterior también se puede expresar mediante el uso del ‘If’ ternario:

c = if (p.right.type = variant.TypeColor, p.right, rgb(0,0,0)

Resultando en un código algo más elegante.

Aspectos avanzados de los métodos

Una vez que hemos llenado nuestro saco con una buena cantidad de tipos de colección, es hora de que regresemos a las piezas fundamentales de nuestras aplicaciones: las clases.

En la próxima entrega veremos de hecho la definición avanzada de métodos y propiedades que otorgan aun más flexibilidad y potencia a la definición de las Clases en las aplicaciones Xojo. Hasta entonces, repasa lo visto hasta ahora en los artículos “Xojo: de Clases y Objetos”, “Xojo: Constructores, Subclases y POO” y “Xojo: Parámetros opcionales, y paso de datos por valor o referencia”.

Enlaces de Interés sobre Xojo

Artículos anteriores

Javier Rodríguez (@bloguintosh) es desarrollador OS X e iOS, director de Macsoluciones.com. Puedes contactar con él para el desarrollo de aplicaciones para Mac e iOS en entornos empresariales así como consultoría y formación.

1 Comentario

  1. juan.varios 23 mayo, 2014

    Muy interesante el curso Javier. Muchas gracias. Te animamos a seguir.

    Por cierto, una empresa de un conocido tiene una oferta de trabajo para PROGRAMADOR EN XOJO, en ALICANTE.

    Si alguien está interesado, que me mande un mensaje privado.

Dejar un comentario

Twitter
Visit Us
Tweet
YouTube
Pinterest
LinkedIn
Share