Guía mínima de Ada 95 |
La cabecera describe el protocolo del subprograma, y consta de: especificación de "procedure" o "function", nombre del subprograma, lista de parámetros y tipo del resultado, caso de ser una function.
procedure Nombre_procedimiento (parámetros) is
function Nombre_función (parámetros) return Tipo is
La lista de parámetros está formada por especificaciones de parámetros formales separadas por ";". Cada especificación de parámetros consta de una lista de nombres de parámetros separados por "," y seguida de ":", el modo de paso (in, out o in out) y el tipo de los parámetros.
procedure LisParam(S1,S2: in integer;S3: out float) is
La parte de sentencias ejecutables comienza con la palabra "begin" y abarca hasta que aparezca la palabra "end" seguida del nombre del subprograma y ";".Los parámetros "in" son constantes y no pueden modificarse en el subprograma. Los parámetros "in out" pueden usarse y modificarse. Las funciones sólo tienen parámetros "in".
La parte de declaraciones locales abarca desde la cabecera hasta la palabra "begin" que da comienzo a las sentencias ejecutables. Los elementos declarados (variables, tipos, subtipos, procedimientos,...) tienen ámbito estático.
--Ejemplo de subprogramas
with Text_IO; use Text_IO;
procedure Ejemplo is --procedimiento
principal Ejemplo
--requerimientos de entrada/salida;
package Sal1 is new
Integer_IO(integer);
package Sal2 is new
Float_IO(float);
use Sal1, Sal2;
--función local EsPar
function EsPar(x: in integer)
return boolean is
begin
return ((x
rem 2) = 0);
end EsPar;
--procedimiento local Media
procedure Media(x,y: in float;med:
out float) is
dos: float; --variable
local
begin
dos := 2.0;
med := (x + y) / dos;
end Media;
R1,R2,R3 : float; --variables locales
de Ejemplo
i : integer;
begin
put("Entre un numero: ");
Get(i); skip_line;
if
EsPar(i) then put_line("es par"); else put_line("no es par");
end if;
put("Entre una pareja de
numeros separados por un espacio: ");
Get(R1); Get(R2); skip_line;
Media(R1,R2,R3);
Put(R3); new_line;
end Ejemplo;
podemos sobrecargar el operador de suma ("+") para utilizarlo con el fin de sumar números complejos:
function "+"(A, B : in Complejo) return
Complejo is
Suma: Complejo;
begin
Suma.PReal := A.PReal + B.PReal;
Suma.PImag := A.PImag + B.PImag;
return Suma;
end "+";
Una vez definida esta función, se puede aplicar el operador entre
variables del tipo definido en los parámetros, devolviendo un valor
del tipo definido como resultado.
...
S, X, Y: Complejo;
...
S := X + Y;
Sólo se pueden redefinir los operadores del lenguaje (no se pueden
inventar operadores), y siempre manteniendo su cardinalidad (los binarios
se redefinirán con funciones de dos parámetros y los unarios
con funciones de un parámetro).