Capítulo 7. Procedimientos y Funciones I.Como vimos anteriormente los Procedimientos, al contrario que las funciones, no devuelven ningún valor. Para declarar un procedimiento empleamos la siguiente sintaxis:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure MiProcedimiento;
begin
end;
begin
end.
En el archivo .dpr del programa los procedimientos y funciones se declaran siempre encima del
begin y del
end. (es el punto de entrada del programa o EntryPoint). Utilizamos la palabra reservada
procedure y a continuación ponemos el identificador de nuestro procedimiento seguido de un punto y coma. El identificador de los procedimientos y funciones siguen las mismas reglas que las variables y constantes. A continuación ponemos un
begin y un
end; terminado en punto y coma. Una vez hecho esto, podemos poner código dentro de nuestro procedimiento entre el
begin y el
end;.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure MiProcedimiento;
begin
Writeln('Este es mi procedimiento');
Writeln('....');
end;
begin
MiProcedimiento; //También sirve MiProcedimiento();
Readln;
end.
El procedimiento escribe un par de líneas en la consola y lo llamamos desde el punto de entrada de nuestro programa.
Para declarar una función utilizamos la palabra reservada
function y sigue las mismas reglas que los procedimientos, excepto que después del identificador de la función va seguida de
: y el tipo de dato a devolver.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Funcion: integer;
var
Operacion: integer;
begin
Operacion:= ((14 * 27) div 2) - 4;
Result:= Operacion; //También vale Funcion:= Operacion;
end;
begin
Writeln('Funcion: ', Funcion);
Readln;
end.
Nuestra función devuelve un valor entero. Dentro de un procedimiento y función se pueden declarar nuevas variables que solamente son accesibles desde el interior de ellas. Para ello se declaran antes del
begin.
Para devolver el valor de la función se emplea Result seguido del operador de asignación aunque también sirve empleando el nombre de la función. Al contrario que C/C++ y otros lenguajes de programación, el hecho de llamar a
result no interrumpe la ejecución de la función. Si quieres interrumpir la ejecución de un procedimiento o función puedes emplear
Exit;.
Paso de parámetrosPara que una función o procedimiento reciba unos parámetros se realiza de la siguiente forma:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Suma(a: integer; b: integer): integer;
begin
Result:= a + b;
end;
begin
Writeln('Suma: ', Suma(2, 3));
Readln;
end.
Los parámetros se declaran a continuación del identificador de la función o procedimiento, entre paréntesis. Los parámetros se separan con punto y coma, aunque si son del mismo tipo se pueden declarar así:
function Suma(a,b: integer; mensaje: string): integer;
begin
Writeln(Mensaje);
Result:= a + b;
end;
Los parámetros que se pasan a una función/procedimiento se pueden modificar dentro de ella. Para evitar esto, los parámetros se pueden declarar como constantes. Según el libro Delphi 5, declarar los parámetros como constantes optimizan el ejecutable generado, así que si sus valores no van a variar, es un buen hábito.
function Resta(const a, b: integer): integer;
begin
Result:= a - b;
end;
Si en tu programa tienes varias funciones/procedimientos tienes que plantear el orden de declaración para que no se produzcan errores. Por ejemplo:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure Proc1;
begin
Proc2;
end;
procedure Proc2;
begin
Writeln('Hacer algo');
end;
begin
Readln;
end.
Este código
NO se podría compilar, el compilador daría una excepción. En el procedimiento Proc1 se está llamando a Proc2 que está declarado a continuación, así que Proc1 no tiene ninguna referencia para llamar a Proc2 por lo que se produce un error. Para corregir este error, bastaría con poner Proc2 encima de Proc1.
Dentro de unos cuantos capítulos veremos como declarar funciones y procedimientos en archivos .pas y tendríamos otra forma de solucionar este error.