Anterior | Superior | Siguiente

Guía de referencia básica de Ada 95

Sentencias compuestas.

Introducción.

Sentencias compuestas son las que contienen otras sentencias simples o compuestas.

Bloques.

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;

Sentencias de control.

Las sentencias de control son sentencias compuestas que controlan la ejecución de un grupo de sentencias.

Selección entre dos alternativas.

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;

Selección entre múltiples alternativas.

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;

Repetición controlada por contador.

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;

Repetición controlada por condición lógica.

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