next up previous contents
Siguiente: Elección del nombre del Subir: Subprogramas Anterior: Subprogramas   Índice General

Procedimientos y funciones

La principal diferencia que encontramos entre un procedimiento y una función es la forma en que se utilizan. Para llamar a un procedimiento solamente damos su nombre. Sin embargo, como toda función devuelve siempre un valor, debemos almacenar el resultado que devuelve en una variable o utilizar este valor en alguna expresión aritmética o lógica. Por ejemplo:

          
 1: procedure Ejemplo_1 is    1: procedure Ejemplo_2 is
 2:                           2:
 3:    procedure Menu is      3:    function Maximo
 4:    begin                  4:       return Positive is
 5:       ...                 4:    begin
 6:       ...                 5:       ...
 7:       return;             6:       return Positive'Last;
 8:    end Menu;              7:    end Maximo;
 9:                           8:
10:                           9:    Valor : Positive;
11:  begin                   10: begin
12:     Menu;                11:    Valor := Maximo;
13:  end Ejemplo_1;          12: end Ejemplo_2;

El ejemplo de la izquierda funciona de la siguiente forma: Ada comienza la ejecución del código del programa principal (que en este caso se llama Ejemplo_1). Entre el begin y el end sólamente hay una llamada a Menu. Esto significa que Ada debe dejar pendiente la ejecución del programa principal y ejecutar el procedimiento Menu. Ada ejecuta el procedimiento Menu hasta que encuentre la palabra return o llegue al end Menu. En ambos casos da por finalizado el procedimiento y continúa ejecutando el procedimiento que tiene el programa principal. En caso de que Menu llame a otros procedimientos, Ada ejecuta esos procedimientos y, cada vez que finalice la ejecución de uno, volverá al anterior para completar su ejecución.

Como vemos, trabajar con subprogramas tiene enormes ventajas. Podemos dar un nombre a un fragmento de código y llamarlo cada vez que lo necesitemos (evitando así repetir el mismo código dentro del programa). De esta forma, si decidimos cambiar alguna de las acciones de este código sólo necesitaremos hacer el cambio una vez, mientras que si hemos repetido el código muchas veces tendremos que buscar todos los trozos repetidos y cambiarlos todos exactamente de la misma forma (desde que se nos olvide corregir alguno de los trozos estaremos introduciendo errores en nuestro programa que serán cada vez más difíciles de detectar).

La ejecución de la función del segundo ejemplo es similar. La principal diferencia es que en su declaración debemos decir el tipo de dato que devuelve (línea 3) y que en el punto de la llamada tendremos que utilizar una asignación (porque el resultado de la función hay que guardarlo en alguna variable). Tiene como ventaja que podemos utilizar directamente el resultado de la función para evaluar cualquier expresión. Por ejemplo:

          Valor := Maximo - 456;
Para devolver el valor de la función, el cuerpo de la función debe tener obligatoriamente la palabra return seguida del valor que se quiere devolver (en este caso se devuelve Positive'Last, línea 6).



Subsecciones
next up previous contents
Siguiente: Elección del nombre del Subir: Subprogramas Anterior: Subprogramas   Índice General
Javier Miranda 2002-10-03