FUNCTION |
Fonction |
---|---|
Delphi/Kylix/Lazarus |
Syntaxe
Function identf:typef; corps de la fonction; |
Function identf(param):typef; corps de la fonction; |
Type identf=Function(param):typef; |
Type identf=Function(param):typef of object; |
Paramètres
Nom | Description |
---|---|
identf | Ce paramètre permet d'indiquer l'identificateur de la fonction |
param | Ce paramètre permet d'indiquer les paramètres de la fonction |
typef | Ce paramètre permet d'indiquer le type de données de la fonction |
corps de la fonction | Ce paramètre permet d'indiquer le corps de la fonction |
Description
Ce mot réservé permet de définir une fonction utilisateur. Une fonction est un sous-programme renvoyant une valeur. Dans la première syntaxe, la définition d'une fonction renvoi simplement un type de données et une seule valeur peut être renvoyée par une fonction. Dans la deuxième syntaxe, la définition d'une fonction à laquelle sont transmis un ou plusieurs paramètres et retourne un type de données et une seule valeur peut être renvoyée par une fonction. Cependant, l'utilisation du mot réservé OUT ou VAR avant un paramètre permet au paramètre d'être traité comme une variable contenant des valeurs de retour. Dans la troisième syntaxe, la définition d'une fonction est un type de données et il permet à la fonction d'être transmise en tant que paramètre et utilisée en tant que variable. La définition du type définit uniquement le profil de la fonction et non le nom. Le nom d'une fonction de ce profil peut être attribué à une variable de ce type. Lorsqu'il est attribué, le nom de la variable peut être traité comme s'il s'agissait d'un nom de fonction. Dans la quatrième syntaxe, la définition d'une fonction permet de faire référence à une méthode d'objet. L'accès à une variable de ce type se comporterait alors comme si vous appeliez directement la méthode d'objet.
Dans la section d'INTERFACE d'une unité (UNIT), seul l'entête de la fonction (son nom, ses paramètres, le type de retour et les directives, mais pas le corps) peut apparaître. Vous pouvez également définir un type fonctionnel. Dans la section d'implémentation (IMPLEMENTATION), vous devez fournir une définition de fonction complète pour chaque fonction déclarée dans la section INTERFACE (voir la directive EXTERNAL pour savoir comment définir une fonction sans fournir de corps). Vous pouvez omettre les paramètres de la section IMPLEMENTATION si la fonction n'est pas surchargée. Si vous fournissez les paramètres, ils doivent correspondre exactement (y compris les noms des paramètres) à l'entête de la fonction dans la section INTERFACE. L'implémentation d'une fonction ne doit pas répéter les directives apparaissant en premier avec l'entête de la fonction.
Remarques
- Bien qu'il conserve une copie de l'entête dans l'implémentation de la fonction représente un travail de maintenance supplémentaire, il représente un avantage considérable pour la personne qui gérant le code. Il n'est pas pratique de devoir accéder à la déclaration de la fonction uniquement pour en savoir plus sur ses paramètres.
- Vous pouvez déclarer plusieurs fonctions avec le même nom mais des paramètres différents en utilisant la directive OVERLOAD.
- Une fonction peut être déclarée dans une déclaration de classe. Dans ce cas, on l'appelle une méthode. Une méthode peut être déclarée avec les directives dynamiques (DYNAMIC) ou virtuelles (VIRTUAL) pour déclarer une méthode virtuelle. Une méthode virtuelle peut être déclarée avec la directive ABSTRACT, auquel cas vous ne devez pas fournir d'implémentation de fonction.
- La convention d'appel par défaut est REGISTER. Vous pouvez choisir une convention d'appel différente avec les directives CDECL, PASCAL, SAFECALL ou STDCALL.
- Les directives sont facultatives, mais si vous les incluez, vous devez utiliser les méthodes de commande suivantes : réintroduire, surcharger (OVERLOAD), virtuel (VIRTUAL), dynamique (DYNAMIC), OVERRIDE, CDECL, PASCAL, REGISTER, SAFECALL, STDCALL, ABSTRACT (uniquement si VIRTUAL, DYNAMIC ou OVERRIDE apparaît) plus tôt.
Exemple
Voici un exemple permettant d'afficher le logarithme inférieurs à 2 en utilisant le mot réservé «FUNCTION» :
on obtiendra le résultat suivant :
LOG(0.100000)=-2.302585LOG(0.200000)=-1.609438
LOG(0.300000)=-1.203973
LOG(0.400000)=-0.916291
LOG(0.500000)=-0.693147
LOG(0.600000)=-0.510826
LOG(0.700000)=-0.356675
LOG(0.800000)=-0.223143
LOG(0.900000)=-0.105360
LOG(1.000000)=0.000000
LOG(1.100000)=0.095310
LOG(1.200000)=0.182322
LOG(1.300000)=0.262364
LOG(1.400000)=0.336472
LOG(1.500000)=0.405465
LOG(1.600000)=0.470004
LOG(1.700000)=0.530628
LOG(1.800000)=0.587787
LOG(1.900000)=0.641854
Voir également
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Abstract
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Const
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Dynamic
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Out
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Override
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Procedure
Langage de programmation - Delphi/Kylix/Lazarus - Référence des variables - Result
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Var
Langage de programmation - Delphi/Kylix/Lazarus - Références de mots réservés (mots clefs) - Virtual