next up previous contents
Siguiente: Estructuras repetitivas Subir: Estructuras condicionales Anterior: if   Índice General

case

Si necesitamos utilizar una estructura if múltiple en que la condición es siempre la misma (la única diferencia es el valor que debe cumplirse en cada caso) es mejor utilizar la sentencia case.

         case Expresion is
            when ... =>
                 -----
                 -----  (bloque 1 de codigo)
                 -----
            when ... =>
                 .
                 .
                 .
            when ... => 
                 -----
                 -----  (bloque N de codigo)
                 -----
            when others =>
                 -----
                 -----  (bloque N+1 de codigo)
                 -----
         end case;

La expresión que decide el salto de la sentencia case debe ser de tipo discreto (un entero o un tipo enumerado). Dentro del case se deben gestionar TODOS los posibles casos. Si no se desea realizar ninguna acción en un determinado caso se debe utilizar la sentencia especial null. Para especificar que en el resto de los casos se realice una determinada acción se utiliza when others (como vemos, su función es similar al else de la estructura if múltiple).

Cuando queremos asociar el mismo fragmento de código a varios casos podemos:

En el siguiente ejemplo suponemos que Letra es una variable de tipo Character. Si el valor del carácter es '*', se ejecutará el primer bloque; si es # o $, se ejecutará el segundo bloque; si es un dígito se ejecuta el tercer bloque; si es una letra (mayúscula o minúscula) se ejecuta el cuarto bloque. Finalmente, si es cualquier otro carácter, se ejecuta el quinto bloque de código.

      case Letra is                        
        when '*' =>                  
           -----;                   
           -----;                  
        when '#' | '$' =>         
           -----;                
           -----;               
           -----;                    
        when '0' .. '9' =>           
           -----;                   
        when '..'Z' | '..'z' =>
           -----;                 
           -----;                
           -----;           
        when others =>
           -----;    
           -----;    
     end case;

Para entender bien este ejemplo veamos a continuación su equivalente utilizando el if múltiple.

case Letra is 
   when '*' =>                        if Letra = '*' then 
      -----;                             -----; 
      -----;                             -----; 
   when '#' | '$' =>                  elsif Letra = '#' or Letra = '$' then 
      -----;                             -----; 
      -----;                             -----; 
      -----;                             -----; 
   when '0' .. '9' =>                 elsif Letra in '0' .. '9' then 
      -----;                             -----; 
   when '..'Z' | '..'z' =>        elsif Letra in '..'Z'
                                            or Letra in '..'z' then 
      -----;                             -----; 
      -----;                             -----; 
      -----;                             -----; 
   when others =>                     else 
      -----;                             -----; 
      -----;                             -----; 
end case;                             end if;

En el último elsif (ejemplo de la derecha) hemos utilizado el operador in. Este operador returna True cuando el valor de una variable está en el rango que se especifica justo a continuación de la palabra in.


next up previous contents
Siguiente: Estructuras repetitivas Subir: Estructuras condicionales Anterior: if   Índice General
Javier Miranda 2002-10-03