Les fonctions et procédures sont une partie importante du langage Delphi. À partir de Delphi 4, Delphi nous permet de travailler avec des fonctions et des procédures qui prennent en charge les paramètres par défaut (rendant les paramètres facultatifs), et permet à deux routines ou plus d'avoir un nom identique mais de fonctionner comme des routines complètement différentes.
Voyons comment la surcharge et les paramètres par défaut peuvent vous aider à mieux coder.
Autrement dit, la surcharge, c'est déclarer plus d'une routine avec le même nom. La surcharge nous permet d'avoir plusieurs routines qui partagent le même nom, mais avec un nombre différent de paramètres et de types.
À titre d'exemple, considérons les deux fonctions suivantes:
Les routines surchargées doivent être déclarées avec la directive overload une fonction SumAsStr (a, b: entier): chaîne; surcharge; commencer Résultat: = IntToStr (a + b); fin; une fonction SumAsStr (a, b: étendu; Chiffres: entier): chaîne; surcharge; commencer Résultat: = FloatToStrF (a + b, ffFixed, 18, Digits); fin;
Ces déclarations créent deux fonctions, toutes deux appelées SumAsStr, qui prennent un nombre différent de paramètres et sont de deux types différents. Lorsque nous appelons une routine surchargée, le compilateur doit être en mesure de dire quelle routine nous voulons appeler.
Par exemple, SumAsStr (6, 3) appelle la première fonction SumAsStr, car ses arguments sont à valeur entière.
Remarque: Delphi vous aidera à choisir la bonne implémentation à l'aide de l'achèvement du code et de la compréhension du code.
D'un autre côté, considérez si nous essayons d'appeler la fonction SumAsStr comme suit:
SomeString: = SumAsStr (6.0,3.0)
Nous obtiendrons une erreur qui se lit comme suit: "il n'y a pas de version surchargée de 'SumAsStr' qui peut être appelée avec ces arguments."Cela signifie que nous devons également inclure le paramètre Digits utilisé pour spécifier le nombre de chiffres après le point décimal.
Remarque: Il n'y a qu'une seule règle lors de l'écriture de routines surchargées, c'est-à-dire qu'une routine surchargée doit différer dans au moins un type de paramètre. Le type de retour, à la place, ne peut pas être utilisé pour distinguer entre deux routines.
Disons que nous avons une routine dans l'unité A, et que l'unité B utilise l'unité A, mais déclare une routine avec le même nom. La déclaration dans l'unité B n'a pas besoin de la directive surcharge - nous devons utiliser le nom de l'unité A pour qualifier les appels vers la version A de la routine de l'unité B.
Considérez quelque chose comme ceci:
unité B;… les usages UNE;… procédure RoutineName; commencer Résultat: = A.RoutineName; fin;
Une alternative à l'utilisation de routines surchargées consiste à utiliser des paramètres par défaut, ce qui entraîne généralement moins de code à écrire et à maintenir.
Afin de simplifier certaines instructions, nous pouvons donner une valeur par défaut pour le paramètre d'une fonction ou d'une procédure, et nous pouvons appeler la routine avec ou sans le paramètre, ce qui la rend facultative. Pour fournir une valeur par défaut, terminez la déclaration de paramètre par le symbole égal (=) suivi d'une expression constante.
Par exemple, étant donné la déclaration
une fonction SumAsStr (a, b: étendu; Chiffres: entier = 2): chaîne;
les appels de fonction suivants sont équivalents.
SumAsStr (6.0, 3.0)
SumAsStr (6.0, 3.0, 2)
Remarque: Les paramètres avec des valeurs par défaut doivent apparaître à la fin de la liste des paramètres et doivent être passés par valeur ou comme const. Un paramètre de référence (var) ne peut pas avoir de valeur par défaut.
Lors de l'appel de routines avec plus d'un paramètre par défaut, nous ne pouvons pas ignorer les paramètres (comme dans VB):
une fonction SkipDefParams (var Un string; B: entier = 5, C: booléen = Faux): booléen;… // cet appel génère un message d'erreur CantBe: = SkipDefParams ('delphi',, True);
Lorsque vous utilisez à la fois une surcharge de fonction ou de procédure et des paramètres par défaut, n'introduisez pas de déclarations de routine ambiguës.
Considérez les déclarations suivantes:
procédure DoIt (A: étendu; B: entier = 0); surcharge; procédure DoIt (A: étendu); surcharge;
L'appel à la procédure DoIt comme DoIt (5.0), ne se compile pas. En raison du paramètre par défaut de la première procédure, cette instruction peut appeler les deux procédures, car il est impossible de dire quelle procédure doit être appelée.