Escribe tu búsqueda

Xojo: Usar Arrays como parámetros y parámetros arbitrarios

Compartir

Como hemos visto, a la hora de definir los métodos de nuestras clases tenemos la posibilidad de utilizar todo tipo de datos com parámetros, tanto los primitivos como cualquier objeto; además de las diferencias que existen entre hacerlo por valor o por referencia. Ahora bien, ¿y si lo que queremos es pasar un array de valores? ¿qué opciones tenemos a nuestro alcance?

Este tipo de casos también está contemplado bajo Xojo, y de hecho varía ligeramente la sintaxis que hemos de utilizar en la definición de los parámetros durante la declaración del método en cuestión. Así, si lo siguiente declara un parámetro de tipo Integer para el método ‘muestraNumero’:

  

En el siguiente caso estaríamos declarando el método ‘sumaNumeros’ donde se recibe un Array de datos de tipo Intenger:

Como puedes ver la única diferencia es que en el segundo caso un par de paréntesis acompañan al nombre de la variable, a partir de ese momento ya podremos tratarlo desde el código del método como si fuese un array declarado localmente; es decir, accediendo a los métodos y propiedades de este tipo de datos. Por ejemplo de la siguiente forma:

 dim i as integer

   for each x as integer in n

       i = i + x

     next

   return i

El método se encargará de sumar todos los elementos del array recibido bajo la variable ‘n’. Y para comprobarlo podemos utilizar el siguiente código en el Evento Open del objeto Window1:

  dim miArray() as integer = Array(1, 2, 3, 4, 5, 6)

  MsgBox str( sumaNumeros( miArray ) )

Como puedes comprobar, al ejecutar el programa aparecerá un mensaje con la suma de todos los números (en total, 21).

Arrays multidimensionales como parámetros

Al igual que es posible declarar Arrays de más de una dimensión, también es posible recibirlos en nuestros métodos para operar sobre sus contenidos. En este caso, la única variación que debemos de hacer sobre los Array de tipo unidimensional es añadir entre paréntesis tantas comas como dimensiones tenga el Array en cuestión, sin necesidad de especificar la cantidad exacta de elementos disponibles en cada una de dichas dimensiones:

Y en este caso deberíamos de adaptar el código de nuestro método para sumar números de la siguiente manera:

  dim suma as integer

  for x as integer = 0 to UBound(n,1)

    for y as integer = 0 to UBound(n,2)

      suma = suma + n(x,y)

    next

  next

  return suma

Como puedes comprobar, utilizamos la función Ubound para hallar los límites de cada una de las dimensiones en la matriz, puesto que estos no son conocidos (es decir la cantidad de elementos o “filas” por cada “columna” de la matriz). Así es posible utilizar dicha información para iterar por cada uno de los elementos de la cuadrícula (en este caso una matriz bidimensional).

A continuación modificamos el código del evento Open en Window1 para pasar un array de dos dimensiones a nuestro método:

  Dim miArray(1,3) as integer

  miArray(0,0) = 1

  miArray(0,1) = 2

  miArray(0,2) = 3

  miArray(0,3) = 4

  miArray(1,0) = 1

  miArray(1,1) = 2

  miArray(1,2) = 3

  miArray(1,3) = 4

  MsgBox str( sumaNumeros( miArray ) )

Cuando ejecutes la aplicación obtendrás el mismo resultado que en el caso anterior, salvo que ahora hemos visto el modo en el que podemos pasar y recibir arrays de múltiples dimensiones.

Métodos con parámetros arbitrarios

Todos los lenguajes de programación que se respeten proporcionan un modo de declarar métodos o funciones en los que se admita una cantidad de parámetros variable, no conocida previamente. Esto proporciona una flexibilidad tremenda puesto que reduce la necesidad de sobrecargar un mismo método o bien recurrir, en cierto modo, al uso de arrays en la declaración de los parámetros propiamente dichos.

¿Y por qué hasta cierto punto? Pues porque la solución proporciona por Xojo nos recuerda mucho a lo que hemos visto hasta ahora en el anterior apartado. De hecho para declarar una cantidad variable de parámetros utilizaremos la palabra clave ‘ParamArray’. Por ejemplo:

ParamArray n as integer

Retomemos el primer ejemplo, introduciendo lo siguiente en el panel Inspector correspondiente al método ‘sumaNumeros’:

Y en el Editor de código correspondiente al método introduciremos lo siguiente:

  dim suma as integer

  for each i as integer in n

    suma = suma + i

  next

  Return suma

Como verás es idéntico a nuestra primera versión del método ‘sumaNumeros’. ¿Qué cambia entonces? La forma en la que llamamos al método y donde no es preciso declarar y utilizar formalmente una variable de tipo Array para pasar los valores como parámetros a dicho método. Introduce el siguiente código en el evento Open de Window1 y ejecuta la aplicación:

  MsgBox str( sumaNumeros( 1,2,3,4,5,6 ) )

Como puedes comprobar sólo necesitamos una única línea, y al haber declarado el método con una serie de parámetros variables, también funcionará correctamente en los siguientes casos:

   MsgBox str( sumaNumeros( 1,2, 3, 4 ) )

   MsgBox str( sumaNumeros( 1,2, 3 ) )

   MsgBox str( sumaNumeros( 1,2, 3,4,5,6,7,8,9 ) )

Hacia los métodos y propiedades de clase

Hasta ahora ya hemos visto todas las formas en las que podemos declarar y utilizar los parámetros en los métodos de nuestras clases, y que podremos invocar en cualquier instancia (objeto) creado a partir de la clase en cuestión.

Lo que veremos en la próxima entrega es lo que en Xojo se denominan Shared Methods y Shared Properties, y que en otros lenguajes de programación orientados a objeto conocemos como métodos y propiedades de Clase, respectivamente.

¿Cuál es la principal diferencia en comparación con los métodos y propiedades que hemos visto hasta ahora. Muy simple, en el caso de los Shared Methods y Shared Properties ¡no es preciso crear previamente una instancia! Pero eso es algo que veremos la semana que viene.

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.

Dejar un comentario

Twitter
Visit Us
Tweet
YouTube
Pinterest
LinkedIn
Share