Sobrecarga del método Delphi y parámetros predeterminados

Las funciones y procedimientos son una parte importante del lenguaje Delphi. Comenzando con Delphi 4, Delphi nos permite trabajar con funciones y procedimientos que admiten parámetros predeterminados (haciendo que los parámetros sean opcionales), y permite que dos o más rutinas tengan un nombre idéntico pero funcionen como rutinas completamente diferentes.

Veamos cómo la sobrecarga y los parámetros predeterminados pueden ayudarlo a codificar mejor.

Sobrecarga

En pocas palabras, la sobrecarga es declarar más de una rutina con el mismo nombre. La sobrecarga nos permite tener múltiples rutinas que comparten el mismo nombre, pero con un número diferente de parámetros y tipos..

Como ejemplo, consideremos las siguientes dos funciones:

 Las rutinas sobrecargadas deben declararse con la directiva de sobrecarga función SumAsStr (a, b: entero): cuerda; sobrecargar; empezar    Resultado: = IntToStr (a + b); final; función SumAsStr (a, b: extendido; Dígitos: entero): cuerda; sobrecargar; empezar    Resultado: = FloatToStrF (a + b, ffFixed, 18, dígitos); final; 

Estas declaraciones crean dos funciones, ambas llamadas SumAsStr, que toman un número diferente de parámetros y son de dos tipos diferentes. Cuando llamamos a una rutina sobrecargada, el compilador debe poder decir a qué rutina queremos llamar.

Por ejemplo, SumAsStr (6, 3) llama a la primera función SumAsStr, porque sus argumentos tienen un valor entero.

Nota: Delphi lo ayudará a elegir la implementación correcta con la ayuda de la finalización del código y la comprensión del código.

Por otro lado, considere si intentamos llamar a la función SumAsStr de la siguiente manera:

 SomeString: = SumAsStr (6.0,3.0) 

Obtendremos un error que dice: "no hay una versión sobrecargada de 'SumAsStr' que se pueda invocar con estos argumentos."Esto significa que también debemos incluir el parámetro Dígitos utilizado para especificar el número de dígitos después del punto decimal.

Nota: Solo hay una regla al escribir rutinas sobrecargadas, y es que una rutina sobrecargada debe diferir en al menos un tipo de parámetro. El tipo de retorno, en cambio, no se puede usar para distinguir entre dos rutinas.

Dos unidades: una rutina

Digamos que tenemos una rutina en la unidad A, y la unidad B usa la unidad A, pero declara una rutina con el mismo nombre. La declaración en la unidad B no necesita la directiva de sobrecarga; debemos usar el nombre de la unidad A para calificar las llamadas a la versión de A de la rutina desde la unidad B.

Considera algo como esto:

 unidad SI;… usos UN;… procedimiento RoutineName; empezar   Resultado: = A.RoutineName; final; 

Una alternativa al uso de rutinas sobrecargadas es usar parámetros predeterminados, que generalmente resultan en menos código para escribir y mantener.

Parámetros predeterminados / opcionales

Para simplificar algunas declaraciones, podemos dar un valor predeterminado para el parámetro de una función o procedimiento, y podemos llamar a la rutina con o sin el parámetro, haciéndolo opcional. Para proporcionar un valor predeterminado, finalice la declaración del parámetro con el símbolo igual (=) seguido de una expresión constante.

Por ejemplo, dada la declaración

 función SumAsStr (a, b: extendido; Dígitos: entero = 2): cuerda; 

las siguientes llamadas a funciones son equivalentes.

 SumAsStr (6.0, 3.0) 
 SumAsStr (6.0, 3.0, 2) 

Nota: Los parámetros con valores predeterminados deben aparecer al final de la lista de parámetros y deben pasarse por valor o como constante. Un parámetro de referencia (var) no puede tener un valor predeterminado.

Al llamar a rutinas con más de un parámetro predeterminado, no podemos omitir parámetros (como en VB):

 función SkipDefParams (var Una cuerda; B: entero = 5, C: booleano = falso): booleano;… // esta llamada genera un mensaje de error CantBe: = SkipDefParams ('delphi',, True); 

Sobrecarga con parámetros predeterminados

Cuando utilice la sobrecarga de funciones o procedimientos y los parámetros predeterminados, no introduzca declaraciones de rutina ambiguas.

Considere las siguientes declaraciones:

 procedimiento DoIt (A: extendido; B: entero = 0); sobrecargar; procedimiento DoIt (A: extendido); sobrecargar; 

La llamada al procedimiento DoIt como DoIt (5.0) no se compila. Debido al parámetro predeterminado en el primer procedimiento, esta instrucción puede llamar a ambos procedimientos, porque es imposible saber qué procedimiento debe llamarse.