Post on 21-Feb-2018
7/24/2019 03 - Procedimientos y Funciones RTL
1/31
7/24/2019 03 - Procedimientos y Funciones RTL
2/31
Los procedimientos y funciones, se conocen como rutinas, que son
bloques de instrucciones autnomos que pueden ser llamados
desde distintos lugares en un programa.
Una funcin es una rutina que devuelve un valor cuando es
ejecutada.
Un procedimiento es una rutina que no devuelve ningn valor.
Las llamadas a funciones, debido a que devuelven un valor, se
puede utilizar como expresiones en las tareas y operaciones.
Ejemplo
X:=MiFuncion(y);
7/24/2019 03 - Procedimientos y Funciones RTL
3/31
Una declaracin de procedimiento tiene la forma:
Dnde ProcedureName es cualquier identificador vlido,
statementses una secuencia de sentencias que se ejecutan cuando
el procedimiento es llamado, y las directrices (parameterList) y
localDeclarationsson opcionales.
7/24/2019 03 - Procedimientos y Funciones RTL
4/31
Crear una aplicacin de consola.
7/24/2019 03 - Procedimientos y Funciones RTL
5/31
En Delphi Projects seleccionar Console Aplication
7/24/2019 03 - Procedimientos y Funciones RTL
6/31
Cdigo del programa
7/24/2019 03 - Procedimientos y Funciones RTL
7/31
Guardar el proyecto File->Save All
7/24/2019 03 - Procedimientos y Funciones RTL
8/31
Cuando se declara un procedimiento o funcin, puede especificar
una convencin de llamada con una de las directivas: register,
pascal, cdecl, stdcall y safecall.
Por ejemplo:
Function MiFuncion(X,Y: Real): Real;cdecl;
Las convenciones de llamada determinan el orden en que los
parmetros son pasados a la rutina.
Estos afectan la eliminacin de los parmetros de la pila, la
utilizacin por paso de parmetros y el manejo de errores y
excepciones. La convencin de llamada por defecto es register.
7/24/2019 03 - Procedimientos y Funciones RTL
9/31
Las convenciones registery pascalpasan parmetros de izquierda a
derecha; es decir, el parmetro de la izquierda es primero evaluado
y pasado y el parmetro de la derecha es evaluado y pasado
despus.
Las convenciones cdecl, stdcall y safecall pasan parmetros dederecha a izquierda.
Para todas las convenciones, excepto cdecl, los procedimientos o
funciones eliminan los parmetros de la pila en el retorno.
Con la convencin cdecl, la llamada elimina los parmetros de la
pila cuando se llama al retorno.
La convencin register utiliza hasta tres registros de la CPU para
pasar los parmetros, mientras que los otros convenios, pasantodos los parmetros en la pila.
La convencin safecall implementa la excepcin firewalls. En
win32, este implementa el interproceso de notificacin de error
COM.
7/24/2019 03 - Procedimientos y Funciones RTL
10/31
La siguiente tabla resume las convenciones de llamada.
La convencin por defecto de registeres la mas eficiente, ya que
evita la creacin de un marco general de la pila.
La convencin cdecl es til cuando se llaman funciones de
bibliotecas escritas en C o C++.
Stdcall y SafeCall se recomiendan, en general, para las llamadas a
cdigo externo. En win32, las API del sistema operativo son stdcall
y SafeCall. La convencin SafeCalldebe ser usada para declarar los mtodos
dual-interface. La convencin pascal se mantiene por
compatibilidad con versiones anteriores.
Las directivas near, far y export hacen referencia a llamadas de
convenciones de programacin de Windows de 16 bits.
7/24/2019 03 - Procedimientos y Funciones RTL
11/31
Un ejemplo practico seria:
procedure AProc(X, Y, Z: Integer); stdcall;
Llamado al procedimiento:
AProc(X, Y, Z);
E nivel de lenguaje de maquina el llamado tendra el siguiente
comportamiento:
push Z
push Y
push X
call AProc
7/24/2019 03 - Procedimientos y Funciones RTL
12/31
La directiva forward remplaza cdigo, incluyendo declaraciones de
variables locales y estamentos, en una declaracin de
procedimiento o funcin.
Por ejemplo
Function cslcular(x,y:Integer):Real;forward;
En algn lugar despus de la declaracin forward, la rutina se debe
volver a declarar en una definicin de declaracin que incluye un
bloque.
7/24/2019 03 - Procedimientos y Funciones RTL
13/31
Crear una aplicacin de consola.
7/24/2019 03 - Procedimientos y Funciones RTL
14/31
En Delphi Projects seleccionar Console Aplication
7/24/2019 03 - Procedimientos y Funciones RTL
15/31
Cdigo del programa
7/24/2019 03 - Procedimientos y Funciones RTL
16/31
Guardar el proyecto File->Save All
7/24/2019 03 - Procedimientos y Funciones RTL
17/31
La directiva external, sustituye el bloque de la declaracin de unprocedimiento o funcin, le permite llamar rutinas compiladas por
separado desde su programa.
La rutinas Externalpueden venir de objetos file o libreras cargadas
dinmicamente.
7/24/2019 03 - Procedimientos y Funciones RTL
18/31
Usted puede declarar ms de una rutina en el mismo mbito con el
mismo nombre. Las rutinas sobrecargadas deben ser declaradas con la directiva
overloady deben tener listas de parmetros distintivas.
Se crean do funciones llamadas Divide, que toman parmetros de
diferentes tipos, cuando se llama a Divide, el compilador determina
cual es la funcin para invocar.
7/24/2019 03 - Procedimientos y Funciones RTL
19/31
Crear una aplicacin de consola
7/24/2019 03 - Procedimientos y Funciones RTL
20/31
En Delphi Projects seleccionar Console Aplication
Cdigo de la aplicacin
7/24/2019 03 - Procedimientos y Funciones RTL
21/31
Cdigo de la aplicacin
7/24/2019 03 - Procedimientos y Funciones RTL
22/31
Guardar el proyecto File->Save All
7/24/2019 03 - Procedimientos y Funciones RTL
23/31
Funciones procedimientos a veces contienen otras funciones y
procedimientos dentro de la seccin de declaraciones locales desus bloques.
7/24/2019 03 - Procedimientos y Funciones RTL
24/31
El alcance de una rutina anidada se limita a la funcin o
procedimiento en el que se declara.
En nuestro ejemplo NestedProc solo puede ser llamado dentro de
DoSomething.
Ejemplo practico
7/24/2019 03 - Procedimientos y Funciones RTL
25/31
En Delphi Projects seleccionar Console Aplication
7/24/2019 03 - Procedimientos y Funciones RTL
26/31
Cdigo de la aplicacin
7/24/2019 03 - Procedimientos y Funciones RTL
27/31
Guardar el proyecto File->Save All
7/24/2019 03 - Procedimientos y Funciones RTL
28/31
Una lista de parmetros es una secuencia de declaraciones de
parmetros separados por punto y comas entre parntesis.
Parmetros constantes
Un parmetro constante (const) es como una constante local o una
variable de solo lectura.
Parmetros OutUn parmetro Out, como un parmetro variable se pasa por
referencia. Con un parmetro Out, sin embargo, el valor inicial de la
variable referenciada es descartado o la rutina a la que es pasado. El
parmetro Outes solo para salida.
Parmetros sin tipo
Parmetros que no tienen un tipo definido.
Function evaluar(var valor1,valor2; valorfinal:Integer):double;
7/24/2019 03 - Procedimientos y Funciones RTL
29/31
Parmetros String.
Parmetros array.
Parmetros array abiertos.
Parmetros variantes de array abierto.
Parmetros por defecto.
Parmetros por defecto y funciones sobrecargadas.
7/24/2019 03 - Procedimientos y Funciones RTL
30/31
El compilador de Delphi permite que las funciones y procedimientos
sean marcados con la directiva inline para mejorar el rendimiento.
Si la funcin o procedimiento cumple con ciertos criterios, el
compilador inserta el cdigo directamente, en vez degenerar una
llamada.
Inlining es una optimizacin del rendimiento que puede resultar en
un cdigo ms rpido, pero a expensas del espacio.
Inline siempre hace que el compilador produzca un archivo binario
grande.
La directiva inline se utiliza en la declaracin de funciones y
procedimientos y las definiciones, al igual que otras directivas.
7/24/2019 03 - Procedimientos y Funciones RTL
31/31