Object pascal - procedimientos y funciones
En la práctica, sin embargo, la diferencia entre funciones y procedimientos es muy limitada: puede hacer una llamada a una función para realizar cierta tarea y luego saltarse el resultado (que podría ser un código de error opcional o algo similar) o puede hacer una llamada a un procedimiento que transmite un resultado dentro de sus parámetros (más sobreparámetros de referencia se comentará más tarde en este capítulo).
Aquí están las definiciones de un procedimiento y dos versiones de la misma función, usando una sintaxis ligeramente distinta :
procedure Hello;
begin
ShowMessage ('Hello world!');
end;
function Double (Value: Integer) : Integer;
begin
Double := Value * 2;
end;
// ó, como alternativa
function Double2 (Value: Integer) :Integer;
begin
Result := Value * 2;
end;
El uso de Result en vez del nombre de la función para asignar el valor que devuelve una función se está haciendo bastante popular, y, en mi opinión, tiene a hacer el código más legible.
Una vez que estas rutinas han sido definidas, podemos hacer llamadas a ellas cuantas veces queramos. Al procedimiento se le hace una llamada para conseguir querealice su tarea, y se hace una llamada a la función para calcular un valor :
procedure TForm1.Button1Click (Sender: TObject);
begin
Hello;
end;
procedure TForm1.Button2Click (Sender: TObject);
var
X, Y: Integer;
begin
X := Double (StrToInt (Edit1.Text));
Y := Double (X);
ShowMessage (IntToStr (Y));
end;
Nota: Por el momento, no se preocupe de la sintaxis de los dosprocedimientos que aparecen arriba, que son, de hecho, métodos. Sencillamente, coloque dos botones en un formulario Delphi, haga clic en ellos durante el diseño, y el IDE de Delphi generará el código de apoyo adecuado: ahora sólo tiene que cumplimentar las líneas entre begin y end. Para compilar el código de arriba necesitará añadir un control de edición al formulario.
Ahora podemos volver al conceptode encapsulación de código que introduje antes. Cuando haga una llamada a la función Double, no necesita saber cuál es el algoritmo usado para implementarlo. Si más tarde encuentra un método mejor para doblar el valor de un número, puede cambiar el código asociado a la función, con facilidad, sin que se vea afectado el código de llamada a la función (¡aunque la ejecución será más rápida!). Elmismo principio puede ser aplicado al procedimiento Hello: podemos modificar la salida del programa cambiando el código de este procedimiento, y el método Button2Click cambiará su efecto automáticamente. He aquí cómo podemos cambiar el código :
procedure Hello;
begin
MessageDlg ('Hello world!', mtInformation, [mbOK]);
end;
Parámetros de referencia
Las rutinas en Pascal permiten latransmisión de parámetros mediante valores y por referencias. Transmitir parámetros mediante valores es lo normal: el valor se copia a la pila (stack) y la rutina usa y maneja la copia, no el valor original.
Transmitir un parámetro por referencia significa que su valor no se copia en la pila del parámetro formal de la rutina (evitar una copia a menudo significa que el programa se ejecuta más rápido). Ensu lugar, el programa hace uso del valor original, también en el código de la rutina. Esto permite al procedimiento o función cambiar el valor del parámetro. La transmisión de parámetros por referencia se expresa con la palabra clave var.
Esta técnica está disponible en la mayoría de lenguajes de programación. No está presente en C, pero ha sido introducida en C++, donde se usa el símbolo &...
Regístrate para leer el documento completo.