Sentencia SWITCH

SWITCH ( <expresión> )
    CASE <rango de valores> :
        <sentencia> ;
        ...
    END
    ...
    DEFAULT :
        <sentencia> ;
        ...
    END
END

Una sentencia SWITCH consta de una serie de secciones CASE y, opcionalmente, una sección DEFAULT.

Cuando se ejecuta una sentencia SWITCH, primero se evalúa la expresión y después, si el resultado está dentro del rango de valores contemplados en la primera sección CASE, se ejecutarán las sentencias de la misma y se dará por finalizada la sentencia. En caso de no estar el resultado de la expresión en el primer CASE se pasará a comprobarlo con el segundo CASE, el tercero, etc. Y, por último, si existe una sección DEFAULT y el resultado de la expresión no ha coincidido con ninguna de las secciones CASE, entonces se ejecutarán las sentencias de la sección DEFAULT.

Ejemplo:
PROGRAM mi_juego;
BEGIN
    SWITCH (x)
        CASE 1:
            x=-1;
        END
        CASE 2:
            x=-2;
        END
        CASE 3:
            x=-3;
        END
        CASE 99:
            x=-99;
        END
        DEFAULT:
            x=0;
        END
    END
END


La sentencia SWITCH de este programa cambiará de signo la variable x si ésta vale 1, 2, 3 o 99; en caso contrario la pondrá a 0.

Rango de valores de una sección case


En una sección case se puede especificar un valor, un rango de valores (mínimo .. máximo), o una lista de valores y/o rangos separados por comas (,). Por ejemplo, la sentencia anterior se podría haber expresado como:

  SWITCH (x)
      CASE 1..3, 99:
          x=-x;
      END
      DEFAULT:
          x=0;
      END
  END

Una vez ejecutada una de las secciones CASE de una sentencia SWITCH ya no se ejecutarán más secciones, aunque éstas especifiquen también el resultado de la expresión, por ejemplo, en la siguiente sentencia:

  SWITCH (2+2)
      CASE 3..5:
          x=x+1;
      END
      CASE 2, 4, 6:
          y=y-1;
      END
  END

Se ejecutará la sección x=x+1; y después se finalizará la sentencia, no ejecutándose la sección y=y-1; pues, aunque el resultado de la expresión evaluada (4) está contemplado en ella, también lo está en la sección anterior, (ya que 4 está dentro del rango 3..5).

No es necesario ordenar las secciones CASE según sus valores (de menor a mayor, o de mayor a menor), pero sí es imprescindible que la sección DEFAULT (en caso de haberla) sea la última sección. No puede haber más que una sección DEFAULT.

Es posible anidar sentencias SWITCH sin ningún límite, es decir, se pueden poner nuevas sentencias SWITCH dentro de una sección CASE (y cualquier otro tipo de sentencia).


Ver: Sintaxis