A continuación encontrarás traducido al castellano el artículo escrito por Paul Lefebvre y publicado originalmente en el Blog oficial de Xojo.
Hemos actualizado el framework de Android para añadir soporte a varias de las características estándar del lenguaje Xojo que no estaban soportadas hasta ahora, incluyendo:
- Estructuras
- Parámetros ByRef
- Operator_Lookup
- Operator_Convert
Estructuras
Las estructuras son una estructura de datos de tamaño fija que pueden contener propiedades de tipos simples, como Enteros, Cadenas o Booleanos (Integer, String, Boolean).
Por lo general querrás utilizar las estructuras en las llamadas a las API mediante Declare; pero también pueden utilizarse como estructura de datos ligera para un item específico del proyecto.
En el caso de Android, las estructuras no son estructuras de datos de tamaño fijo, de modo que proporcionan algo más de flexibilidad, especialmente cuando se trata de las String. Cuando añades una String a una estructura de Android se ignora el tamaño indicado, de modo que puedes almacenar cadenas en la propiedad independientemente del tamaño que tengan.
El uso es el mismo. Crea una Estructura en el Editor de Estructuras (Structure Editor) para el elemento de proyecto seleccionado, añadiendo a continuación las propiedades que precises.
Observa que las columnas Offset y Size no son relevantes en Android, dado que la estructura no tiene un tamaño fijo.
En el código puedes crear una estructura mediante su nombre:
Var st As StructTest st.Age = 42 st.Dead = True st.Name = "Bob Roberts" st.Weight = 200.6
Dado que las estructuras de Android no están basadas en su tamaño, los miembros ByteValue, Size y StringValue no son útiles y elevarán una excepción UnsupportedOperationException cuando se utilicen.
Parámetros ByRef
Los parámetros ByRef te permiten pasar un parámetro “por referencia”, de modo que el código que realice la llamada pueda acceder a su nuevo valore en el caso de que este haya sido modificado. Por omisión, los parámetros se pasan por valor (ByVal), de modo que el código encargado de llamar al método o función no verá o podrá acceder a cualquiera de los cambios realizados sobre el parámetro dentro del método o función en cuestión.
Utiliza la palabra clave ByRef delante del parámetro para indicar que se quiere pasar por referencia, y no por valor.
Consulta la página correspondiente a ByRef en la Documentación de Xojo para ampliar la información sobre este particular.
Operator_Lookup
Es probable que el operador Operator_Lookup sea particular en Xojo. Cuando añades un método Operator_Lookup a una clase este, en esencia, dice al compilador que no realice ninguna comprobación de sintaxis sobre los nombres de los métodos o propiedades. En vez de ello, si el nombre que se encuentra a continuación del punto “.” no es un miembro de la clase, entonces se pasará el nombre como un parámetro de cadena al método Operator_Convert.
Puedes hacer cosas verdaderamente particulares con Operator_Lookup, incluyendo el hecho de que tu código será mucho más difícil de depurar. Utiliza esta característica avanzada con sabiduría.
Puedes ampliar la información sobre el operador Operator_Lookup en la Documentación de Xojo.
Operator_Convert
El operador Operator_Convert se utiliza en las clases para permitirlas que creen una nueva instancia a partir de un valor de un tipo distingo o bien para permitirlas que devuelvan una versión de sí mismas que sean compatibles con el tipo de destino.
Este es un ejemplo de una clase Person que utiliza Operator_Lookup. La clase Person tiene una propiedad: FullName As String. Así es como podrías crear, por lo general, una nueva instancia y asignarle un valor a la propiedad FullName:
// Person es una clase con la propiedad FullName As String Var p1 As New Person p1.FullName = "Bob Roberts"
Añade ahora el método Operator_Convert a la clase de esta forma:
Sub Operator_Convert(name As String) Self.FullName = name End Sub
Con dicho método ahora es posible asignar un valor de tipo String a la variable Person y esta creará una instancia y le asignará el valor de cadena a la propiedad FullName. La sintaxis será la siguiente:
Var p As Person p = "Bob Roberts"
También puedes añadir un método Operator_Convert que devuelva una representación de una instancia de clase de tipo distinto. Por ejemplo, digamos que quieres que una instancia de Person sea capaz de convertirse a sí misma en una String. En primer lugar has de decidor qué cadena será y en este caso tiene sentido utilizar FullName.
Esta sería dicha versión de Operator_Convert para la clase Person:
Function Operator_Convert As String Return Self.FullName End Function
Este código asigna a continuación la instancia Person a la propiedad Text de Label, donde se obtiene como resultado el valor de la propiedad FullName:
Var p2 As New Person p2.FullName = "Janet Jane" Label1.Text = p2
Tal y como ocurre con Operator_Lookup, el operador Operator_Convert es una característica avanzada. Utilízala con cuidado. Ciertamente permite simplificar cierto código, pero también significa que dicho código no será tan claro en comparación a cuando se utiliza la sintaxis estándar.