[Xojo 2024r4] Características del lenguaje en Android

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.

Deja un comentario

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