¿Alguna vez te has encontrado escribiendo el mismo código una y otra vez para realizar alguna tarea común dentro de los manejadores de eventos?? Si! Es hora de que aprenda sobre programas dentro de un programa. Let & amp; apos; s llama a esos mini programas subrutinas.
Introducción a las subrutinas
Las subrutinas son una parte importante de cualquier lenguaje de programación, y & amp; # x200B; Delphi no es una excepción. En Delphi, generalmente hay dos tipos de subrutinas: a & amp; # x200B; función y un procedimiento. La diferencia habitual entre una función y un procedimiento es que una función puede devolver un valor, y un procedimiento generalmente no lo hará. Una función normalmente se llama como parte de una expresión.
Video destacado
Eche un vistazo a los siguientes ejemplos:
& lt; pre & gt; procedimiento SayHello ( const sWhat: string );
comenzar
ShowMessage (& amp; apos; Hello & amp; apos; + sWhat) ;
final ;
función YearsOld ( const BirthYear: integer): integer ;
var
Año, mes, día: palabra ;
comenzar
DecodeDate (Fecha, año, mes, día);
Resultado: = Año – Año de nacimiento;
final ;
& lt; / pre & gt ;
Una vez que se han definido las subrutinas, podemos llamarlas una o más veces:
& lt; pre & gt; procedimiento TForm1.Button1Click (Enviador: TObject) ;
comenzar
SayHello (& amp; apos; Delphi User & amp; apos;);
final ;
procedimiento TForm1.Button2Click (Enviador: TObject);
comenzar
SayHello (& amp; apos; Zarko Gajic & amp; apos;) ;
ShowMessage (& amp; apos; You are & amp; apos; + IntToStr (YearsOld (1973)) + & amp; apos; años de edad!& amp; apos;);
final ;
& lt; / pre & gt ;
Funciones y procedimientos
Como podemos ver, tanto las funciones como los procedimientos actúan como mini programas. En particular, pueden tener su propio tipo, constantes y declaraciones variables dentro de ellos.
Eche un vistazo más de cerca a una función SomeCalc (miscelánea):
& lt; pre & gt; función SomeCalc
( const sStr: string ;
const iYear, iMonth: integer ;
var iDay: entero): booleano ;
comenzar
…
final ;
& lt; / pre & gt ;
Cada procedimiento o función comienza con un encabezado que identifica el procedimiento o la función y enumera los parámetros que la rutina usa si corresponde. Los parámetros se enumeran entre paréntesis. Cada parámetro tiene un nombre de identificación y generalmente tiene un tipo. Un punto y coma separa los parámetros en una lista de parámetros entre sí.
sStr, iYear e iMonth se denominan parámetros constantes . Los parámetros constantes no pueden ser cambiados por la función (o procedimiento). El iDay se pasa como un parámetro var , y podemos hacer cambios dentro de la subrutina.
Las funciones, dado que devuelven valores, deben tener un tipo de retorno declarado al final del encabezado. El valor de retorno de una función viene dado por la asignación (final) a su nombre. Dado que cada función tiene implícitamente una variable local Resultado del mismo tipo que el valor de retorno de funciones, asignar a Resultado tiene el mismo efecto que asignar al nombre de la función.
Subrutinas de posicionamiento y llamadas
Las subrutinas siempre se colocan en la sección de implementación de la unidad. Dichas subrutinas pueden ser llamadas (usadas) por un controlador de eventos o subrutina en la misma unidad que se define después de ella.
Nota: la cláusula de usos de una unidad le indica a qué unidades puede llamar. Si queremos que una subrutina específica en una Unidad1 sea utilizable por los manejadores de eventos o subrutinas en otra unidad (por ejemplo, Unidad 2), tenemos que:
- Agregue la Unidad 1 a la cláusula de usos de la Unidad 2
- Coloque una copia del encabezado de la subrutina en la sección de interfaz de la Unidad 1.
Esto significa que las subrutinas cuyos encabezados se dan en la sección de interfaz son de alcance global .
Cuando llamamos a una función (o un procedimiento) dentro de su propia unidad, usamos su nombre con los parámetros necesarios. Por otro lado, si llamamos una subrutina global (definida en alguna otra unidad, p. MyUnit) usamos el nombre de la unidad seguido de un punto.
& lt; pre & gt ; …
// El procedimiento desayHello se define dentro de esta unidad
SayHello (& amp; apos; Delphi User & amp; apos;);
// La función YearsOld se define dentro de la unidad MyUnit
Dummy: = MyUnit.YearsOld (1973);
…
& lt; / pre & gt ;
Nota: las funciones o procedimientos pueden tener sus propias subrutinas y amp; # x200B; incrustado dentro de ellos. Una subrutina incrustada es local de la subrutina del contenedor y no puede ser utilizada por otras partes del programa. Algo como:
& lt; pre & gt; procedimiento TForm1.Button1Click (Enviador: TObject);
función IsSmall ( const sStr: cadena ): booleano;
comenzar
// IsSmall devuelve True si sStr está en minúsculas, False de lo contrario
Resultado: = LowerCase (sStr) = sStr ;
final ;
comenzar
// IsSmall solo se puede usar dentro del evento Button1 OnClick
if IsSmall (Edit1.Text) entonces
ShowMessage (& amp; apos; todas las tapas pequeñas en Edit1.Text & amp; apos;)
más
ShowMessage (& amp; apos; no todas las mayúsculas pequeñas en Edit1.Text & amp; apos;);
final ;
& lt; / pre & gt ;
& amp; # x203A; Informática