Sentencias compuestas son las que contienen otras sentencias simples o compuestas.
Un bloque es una sentencia compuesta formada por una secuencia de sentencias agrupadas mediante las palabras delimitadoras "begin", "end" y posiblemente con algunas declaraciones locales.
[declare
declaraciones locales]
begin
sentencias
end;
Un bloque puede ponerse en cualquier sitio donde pueda ponerse una sentencia simple. Ejemplos de bloques:
--bloque sin declaraciones locales
begin
Put_Line("Hola");
end;
--bloque con declaraciones locales
declare
Aux : integer; --la variable Aux sólo existe
dentro del bloque
begin
Aux := i; --i, j se suponen declaradas en un ámbito
más externo
i := j;
j := Aux;
end;
Las sentencias de control son sentencias compuestas que controlan la ejecución de un grupo de sentencias.
La selección entre dos posibles alternativas de ejecución se realiza mediante la evaluación de una condición formulada por una expresión booleana.
| if condición_booleana
then sentencias end if; |
if condición_booleana then sentencias else sentencias end if; |
La selección entre múltiples alternativas de ejecución se realiza mediante la evaluación de un selector.
case selector is
when alternativa => sentencias
when alternativa => sentencias
...
when others => sentencias
end case;
El selector debe ser una expresión discreta de tipos integer o enumerado (tipo ordinal). Las alternativas pueden ser uno o varios valores, o rangos, del tipo del selector separados por "|" (equivale al operador OR). Los valores no pueden repetirse entre dos cláusulas "when". En el caso de que las cláusulas "when" no cubran todos los posibles valores del tipo del selector, es necesario incluir la cláusula "others" para los valores no contemplados.
case Mes is
when 1 .. 2 | 12 => Put("Invierno");
when 3 .. 5 => Put("Primavera");
when 6 .. 8 => Put("Verano");
when 9 .. 11 => Put("Otoño");
when others => Put("¿En qué
planeta estás?");
end case;
Hace que un conjunto de sentencias se ejecute un número de veces determinado a priori; la cuenta de las ejecuciones realizadas se lleva a cabo mediante un parámetro de control del bucle que va tomando los sucesivos valores de un rango ordinal.
for Num in 1..5 loop
Put(Num); -- escribe 1 2 3 4 5
end loop;
El parámetro de control no se declara, adopta automáticamente el tipo del rango que debe recorrer, es local al bucle (oculta mientras se ejecuta cualquier otra declaración con el mismo nombre) y no puede modificarse.
El rango puede recorrerse en orden inverso utilizando la palabra "reverse".
for Num in reverse 1..5 loop
Put(Num); -- escribe 5 4 3 2 1
end loop;
La forma general de un bucle controlado por contador en Ada es:
for parámetro_de_control in
[reverse] rango_ordinal loop
sentencias
end loop;
Ada sólo ofrece explícitamente la versión con control previo.
while condición_booleana loop
...
end loop;
Sin embargo, ofrece un bucle sin esquema de iteración preestablecido que puede simular cualquier esquema. Su forma básica es un bucle infinito como el siguiente:
loop
...
end loop;
De un bucle como éste (de hecho de cualquier bucle) se puede salir usando una sentencia exit donde se desee.
loop
...
exit when condición_booleana;
...
end loop;
© Grupo de Estructuras de Datos y Lingüística Computacional - ULPGC.
Anterior | Superior | Siguiente