03 - procedimientos y funciones rtl

Upload: pana-noco

Post on 21-Feb-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 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