Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×

6.6. La sentencia "forward"

En Pascal, cualquier función o procedimiento debe ser declarado antes de usarlo, o el programa no compilará. Esto no suele ser un problema, pero existe un caso puntual en el que no es posible: Cuando desde un procedimiento A se llame a otro B, pero a su vez, el procedimiento B pueda llamar a A.

En este (poco habitual) caso, cada uno de los procedimientos exigiría que el otro se hubiese detallado antes, la única solución es decirle que uno de los dos (por ejemplo "A") ya lo detallaremos más adelante, pero que existe. Así ya podemos escribir "B" y después dar los detalles sobre cómo es "A", así:

(* FORW.PAS, Ejemplo de "forward"     *)
(* Parte de CUPAS5, por Nacho Cabanes *)

program forw;

procedure A(n: byte); forward;  { No detallamos cómo es "A", porque
                                    "A" necesita a "B", que el compilador
                                    aún no conoce; por eso sólo  "declaramos"
                                    "A", e indicamos con "forward" que
                                    más adelante lo detallaremos }

procedure B (n: byte);          { "B" ya puede llamar a "A" }
begin
  writeLn('Entrando a B, con parámetro ', n);
  if n>0 then A (n-1);
end;

procedure A;                   { Y aquí detallamos "A"; ya no hace falta }
begin                          { volver a indicar los parámetros }
  writeLn('Entrando a A, con parámetro ', n);
  if n>0 then B (n-1);
end;

begin
  A(6);
end. 

(* 
Ejemplo de ejecucion:
Entrando a A, con parámetro 6
Entrando a B, con parámetro 5
Entrando a A, con parámetro 4
Entrando a B, con parámetro 3
Entrando a A, con parámetro 2
Entrando a B, con parámetro 1
Entrando a A, con parámetro 0
*)  

En otros lenguajes se pueden detallar las funciones tras el cuerpo del programa, pero no es el caso en Pascal, ni siquiera empleando "forward": tras el punto final de la orden "end" que indica que acaba el cuerpo del programa no puede haber ninguna función ni procedimiento.

Una alternativa más moderna al uso de "forward" es emplear "unidades", que veremos más adelante.