jueves, 21 de mayo de 2009

Comando "do case" en GeneXus

El comando do case de GeneXus tiene una sintaxis que no me termina de convencer...

El problema es que las condiciones de cada case pueden ir sobre variables distintas. Más que un do case, la sintaxis permite usarlo como un if-elseif.

En Java y C#, el comando equivalente es el switch, que discrimina según los valores que toma una variable dada. Por ejemplo:
switch (variable) {
    case 1:
        // hago algo para el valor 1
        break;
    case 2:
        // hago algo para el valor 2
        break;
    default:
        // hago algo para los demás valores
        break;
}
En GeneXus, el do case me permite hacer cosas como
do case {
    case &variable = 1:
        // hago algo para el valor 1 de &variable
    case &otra_variable = 2:
        // hago algo para el valor 2
de &otra_variable
    otherwise:
        // hago algo para los demás valores
endcase
Me gustaría más tener un comando if-elseif que me permitiera hacer:
if &variable = 1:
    // hago algo para el valor 1 de &variable
elseif &otra_variable = 2:
    // hago algo para el valor 2
de &otra_variable
else
    // hago algo para los demás valores
endif
y un comando do case que fuera sobre los valores de una sola variable, algo así:
do case &variable
    case 1:
        // hago algo para el valor 1 de &variable
    case 2:
        // hago algo para el valor 2
de &variable
    otherwise:
        // hago algo para los demás valores
endcase
Creo que nos forzaría a que el código quede más prolijo.

4 comentarios:

  1. Concuerdo totalmente con tu punto de vista, lo que hace GeneXus va a contramano de todos los demas lenguajes.

    Sin embargo creo que un cambio de esta magnitud dejaría obsoleto mucho código ya escrito,al menos que se desarrolle algun "inspector de código" que cambiara los "viejos" case por los nuevos "else if".

    Saludos.

    ResponderEliminar
  2. Pues yo siempre lo he usado igual que en Java o C#, no sabia que se podia usar variables distintas en cada CASE :-)

    ResponderEliminar
  3. Diego: Es verdad que habría que convertir el código viejo, pero no creo que sea difícil hacerlo automáticamente.

    Aluziner: Entonces hacé de cuenta que nunca leíste esto y seguí usándolo como estaba :)

    ResponderEliminar
  4. Marcos, creo que la sintaxis que vos planteas, deja la cosas mas claras, por lo tanto ayuda a que no se cometan errores.
    Me gusta.

    ResponderEliminar