De la Iteración a la Interacción: Iteración con el Casting de Tipos

A continuación encontrarás traducido al castellano el artículo escrito por Gabriel Ludosanu y publicado originalmente en el Blog de Xojo.

En el desarrollo de software, tanto la eficiencia como la experiencia del usuario son aspectos clave. Una técnica potente que te permite alcanzar ambos objetivos consiste en el uso del casting de tipos en combinación con la iteración de objetos. Mediante la iteración de los controles y la aplicación del casting a sus tipos específicos, los desarrolladores pueden manipular de forma dinámica los elementos de la interfaz de usuario, resultando en aplicaciones más ágiles e interactivas.

En este artículo exploraremos los conceptos del casting de tipos y la iteración de objetos en las aplicaciones Xojo mediante un ejemplo práctico que demuestra cómo se pueden utilizar estas técnicas para optimizar las interacciones de los usuarios.

Comprender el casting de Tipos

El casting de tipos es un concepto en el que un control genérico se convierte (“cast”) a un tipo concreto con el objetivo de acceder a las propiedades y métodos que le son únicos. Esta técnica es particularmente útil cuando has de manipular varios controles de forma dinámica, por ejemplo en un bucle.

Por ejemplo, imaginemos que tenemos varios campos de texto en una ventana y que quieres aplicar una serie de acciones concretas a algunos de estos controles. Mediante el casting de tipos puedes iterar los controles, identificar aquellos en los que estés interesado, y aplicar entonces las acciones deseadas.

El casting de tipos es una técnica ventajosa porque te permite:

  • Acceder a Propiedades concretas: obtener acceso a las propiedades y métodos específicos del control.
  • Mejorar el mantenimiento del código: Escribir código más limpio, legible y reutilizable.
  • Mejorar el Rendimiento: Realizar operaciones de forma más eficiente al dirigirse directamente a tipos de control concretos.

En esencia, el casting de tipos permite a los desarrolladores crear aplicaciones más amigables e interactivas al desatar todas las capacidades de cada tipo de control (luego lo verás en nuestro ejemplo).

Iterar los Controles de la UI

La iteración es una técnicas de programación fundamental utilizada para repetir un bloque de código una serie determinada de veces. En Xojo, la iteración por los controles permite que los desarrolladores puedan interactuar de forma dinámica con cada instancia de un control, haciendo que sea posible aplicar acciones específicas basadas en el tipo de control.

Para iterar por los controles en Xojo puedes utilizar un simple bucle For…Each, lo cual simplifica enormemente el proceso de acceder individualmente a cada control. He aquí un ejemplo básico:

For Each control As DesktopUIControl In Self.Controls
// Realiza acciones en cada control
Next

Utilicemos ahora el casting de tipos para identificar y manipular todos los controles de tipo DesktopUIControl. Por ejemplo, si quieres encontrar todos los controles DesktopTextField y realizar ciertas acciones, como desactivarlos, puedes llevarlo a cabo de la siguiente forma:

// Bucle para iterar todos los controles de la ventana o Container actuales
For Each control As DesktopUIControl In Self.Controls
  // Comprueba si el control es un DesktopTextField
  If control IsA DesktopTextField Then
    // Se hace un Cast del control a DesktopTextField (tipo específico), para aplicar las operaciones específicas a este tipo de control
    Var dtfield As DesktopTextField = DesktopTextField(control)
    // Desactiva los controles que sean de tipo DesktopTextField
    dtfield.Enabled = False
  End If
Next

Veamos qué hace cada parte del código:

  1. El bucle For…Each itera los controles disponibles en Self.Controls. Self se refiere a la ventana o Container sobre el que se está ejecutando el código.
  2. La sentencia If comprueba si el control en curso es una instancia de DesktopTextField.
  3. Si se trata de un tipo DesktopTextField, se hace un cast del control a una variable de tipo DesktopTextField cuyo nombre es dtfield, y se procede a desactivar dicho control.

Consejo: Puedes leer más sobre el operador IsA en https://documentation.xojo.com/api/language/isa.html

Ejemplo Práctico

Veamos ahora un ejemplo práctico para ver tanto la iteración como el casting de tipos en acción.

Sitúa diferentes tipos de controles en una ventana (botones, campos de texto, áreas de texto, menús desplegables, etc.).

Asegúrate también de situar controles DesktopTextField y nómbralos como “PasswordField” y “EamilField”.

En un control Button, añade el evento Pressed y escribe el siguiente código:

// Bucle por todos los controles de la ventana o contenedor en curso
For Each control As DesktopUIControl In Self.Controls
  // Comprueba si el control es un DesktopTextField
  If control IsA DesktopTextField Then
    // Hace un cast del control a DesktopTextField para aplicar operaciones específicas sobre el mismo
    Var dtfield As DesktopTextField = DesktopTextField(control)
    
    // Obtén el nombre del campo de texto actual
    Var ctrlName As String = dtfield.Name
    
    // Comprueba si el campo de texto es de tipo password o bien email
    If (ctrlName = "PasswordField") Or (ctrlName = "EmailField") Then
      // Comprueba si el campo de texto está vacío
      If dtfield.Text.IsEmpty = True Then
        // Si está vacío, sitúa el foco en este campo
        dtfield.SetFocus
        // sal del bucle y de la función/método actuales
        Return
      End If
    End If
  End If
Next

Explicación del código:

  1. El código empieza con un bucle For…Each que itera todos los controles disponibles en la ventana/Contenedor (Self.Controls).
  2. Comprueba si cada control es un DesktopTextField.
  3. En el caso de que así sea, hace un cast de dicho control a un DesktopTextField y lo asigna a la variable dtfield.
  4. El nombre del campo de texto se almacena en la variable ctrlName.
  5. El código comprueba a continuación si el campo de texto es un “PasswordField” o un “EmailField”.
  6. En el caso de que sea uno de estos campos comprueba si el campo está vacío.
  7. Si el campo está vacío, entonces define el foco a dicho campo y sale del bucle y del método o función actuales mediante Return.

El anterior fragmento de código se utiliza para realizar una validación simple. Comprueba si los campos de contraseña o de email están vacíos y si cualquiera de ellos está vacío, entonces define el foco sobre dicho campo y se interrumpe el procesamiento. Esto resulta de utilidad para asegurarse de que los usuarios no envíen un formulario cuando alguno de estos campos cruciales esté vacío.

Conclusión

Dominar el casting de tipos y la iteración en el desarrollo de software no sólo hace que se pueda mantener mejor el código, sino que también resulta una buena estrategia para manejar los objetos instanciados en tiempo de ejecución.

Te animamos a que experimentes con estas técnicas en tus propios proyectos Xojo. Mediante la aplicación de los principios discutidos aquí estarás en el buen camino a la hora de crear aplicaciones más eficientes.

Asegúrate también de comprobar los siguientes recursos:
1. https://documentation.xojo.com/getting_started/object-oriented_programming/advanced_oop_features.html#casting
2. https://documentation.xojo.com/api/language/isa.html#isa
3. https://blog.xojo.com/2017/12/13/make-your-own-classes-iterables/
4. https://blog.xojo.com/2018/03/21/casting-get-ready-and-keep-the-type/

Deja un comentario

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