miércoles, 5 de agosto de 2009

Pasaje de parámetros entre objetos GeneXus

Acá dejo dos sugerencias con respecto al pasaje de parámetros entre objetos GeneXus:
  • parámetros opcionales
  • parámetros nominados
Parámetros opcionales

Muchas veces pasa que se agregan parámetros a un objeto GeneXus, porque se precisa pasarlos desde uno de los llamadores, pero no queremos que el resto de los programas llamadores cambien.

Lo que hacemos hoy es modificar todos los llamadores, agregando un nuevo parámetro con un valor que sería el valor por defecto.

Sería bueno tener la posibilidad de definir que un parámetro es opcional e indicarle cual es el valor por defecto. La definicón podría ser algo así:
parm(in:&par1, in:&par2=0, out:&result);
En este ejemplo el parámetro &par2 sería opcional, y si no se especifica el valor que se usaría en el objeto sería cero, que es el valor que se le da por defecto.

La invocación podría ser así, si se quiere usar el valor por defecto:
&result = Programa.udp(1)
o así, si se quiere especificar otro valor:
&result = Programa.udp(1, 2)
Parámetros nominados

Otra característica que tienen los parámetros en los objetos GeneXus  es que son posicionales.

Como está hoy no hay problema, pero si se permitiera tener parámetros opcionales, se podría plantear el problema que quiero pasarle solo uno de los N parámetros opcionales, lo que no se podría hacer a menos que justo le quiera pasar el primero de la lista.

Algo así:
parm(in:&par1=0, in:&par2=0, in:&par3=0);
¿Cómo hago para pasarle un valor distinto de cero solo a la variable &par2?

La solución podría ser indicarle el nombre del parámetro en la invocación. La sintaxis puede variar...
Programa.call(@&par2=1)
La @ es para indicarle que es el nombre del parámetro y no una variable en el contexto del programa llamador...

4 comentarios:

  1. Están buenas las propuestas.

    Lo bueno aparte es que serían retrocompatibles, o sea el código que se tiene hoy en día andaría sin problemas, ya que es simplemente una extensión de la sintaxis que existe hoy en día.

    Que tan complicado es en la X para Artech cambiar la sintaxis de GX? O sea me preguntó como estará implementado y que tanto laburo le puede llegar a llevar este tipo de cosas, más allá de si luego le dan prioridad o no.

    Saludos

    ResponderEliminar
  2. Marcos, estoy totalmente de acuerdo contigo.

    Me molesta bastante tener que buscar todos los llamadores para agregar un parámetro que no voy a usar.

    Mas de una vez pense que para solucionar ese problema, debería tener SDT's para pasar parámetros.

    En la primera impresión tener un SDT parece algo absurdo, pero puede ser la punta del iceberg (solo que el SDT se debería generar "on the fly").

    Abrazos

    ResponderEliminar
  3. Hola Marcos,te cuento que hace poco empece a programar en gx y quisiera saber si me podes facilitar material más especifico acerca la comunicación entre objetos.
    Te dejo mi mail insuagm@gmail.com
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Lo que escribí en esta nota eran sugerencias y no existen hoy en GX. ¿Qué clase de información estás precisando?

      Eliminar