Quel est le nom de la «spécification» d'une fonction / méthode?

21

Je suis presque sûr qu'il existe un nom spécial pour la "spécification" d'une fonction / méthode. C'est un mot qui fait référence à

  • combien d'arguments il faut
  • l'ordre des arguments
  • quels arguments sont facultatifs

Y a-t-il un nom pour ça?

callum
la source
2
Il existe différents types de "spécifications". Vous mentionnez le type d'argument, l'ordre et la nécessité. Pris ensemble avec le type de retour, cela s'appelle une signature de type. Considérez-vous que le nom de la fonction fait partie de la spécification? Que diriez-vous de son espace de noms, comme classe, package, module, etc.? Cette spécification est-elle destinée aux programmeurs ou aux machines? Voir ma réponse.
kdbanman
4
Je suis surpris que cette question ait quatre votes serrés - c'est une question parfaitement légitime à mon humble avis, et tout à fait responsable (en fait, il a déjà été répondu).
sleske
@callum, veuillez modifier votre question pour qu'elle soit moins ambiguë afin qu'elle ne soit pas balisée. Êtes-vous concerné par une langue spécifique? Une spécification de machine ou une spécification de programmeur? Une spécification pour l'appel ou une spécification pour l'implémentation?
kdbanman
1
@kdbanman J'essayais juste de me souvenir du mot "signature". Ce n'est pas ambigu. Ce n'est pas spécifique à la langue. Il a été répondu. C'est bon.
callum
@callum, c'est ce que je pensais. Merci pour la réponse.
kdbanman

Réponses:

47

Cela s'appelle généralement une signature de type .

Une signature de type inclut le type de retour de la fonction, le nombre d'arguments, les types d'arguments ou les erreurs qu'elle peut renvoyer.

Kilian Foth
la source
6
Habituellement? J'ai l'habitude de "prototyper". Qui est apparemment la signature de type plus le nom - en.wikipedia.org/wiki/Function_prototype
ShadSterling
14
@Polyergic, la signature est plus générale que prototype (et plus correcte dans ce cas): un prototype déclare une signature. Plus précisément, "prototype" implique une déclaration sans implémentation, comme dans une déclaration de méthode Java ou C # dans un interface, ou une déclaration de fonction C / C ++ dans un fichier d'en-tête (littéralement appelé a prototype).
kdbanman le
12
En outre, l' arité est un terme moins couramment utilisé pour le nombre d'arguments.
Sebi
^ Ooh, c'est intéressant! Je devrai me souvenir de cela lorsque je me familiariserai avec JS, car je n'ai que le nombre d'arguments pour me guider, pas les types.
underscore_d
23

TL; DR Vous parlez probablement d'une signature de fonction (ou signature de méthode), dont une partie est une signature de type.

Mais cela dépend vraiment de ce que vous considérez comme une fonction "spec". Je l'interprète comme "toutes les informations nécessaires à un programmeur pour appeler une fonction". Cela inclut le nom de la fonction, le type de paramètre, l'ordre et la nécessité, probablement le type de retour et probablement même l'espace de noms de cette fonction.

Mais si toutes ces choses sont nécessaires (ou même bien définies) dépend du langage / environnement que vous utilisez. De plus, si vous changez la définition en "toutes les informations nécessaires à une machine pour appeler une fonction", la spécification est probablement différente 1 .

À proprement parler, une signature de fonction (ou méthode) n'est pas un terme cohérent, 2, 3 même dans la même langue. 4, 5, 6, 7 Mais c'est presque certainement le mot que vous recherchez, car il sera compris par presque tous les programmeurs.


  1. C ++ Spec Draft n337, définition 1.3.17, la signature n'inclut pas le type de retour, car il n'est pas nécessaire de résoudre la fonction.

  1. "signature" n'inclut pas les informations d'espace de noms
  2. « signature » comprend des exceptions et des modificateurs tels que public, static, etc.

  1. Les "signatures" C ++ n'incluent pas le type de retour
  2. C ++ "signatures" ne comprennent le type de retour.
  3. Les "signatures" C ++ n'incluent pas de type de retour, sauf si la fonction est la spécialisation d'un modèle.
  4. Les "signatures" C ++ incluent des informations sur les espaces de noms (étendue) et des "autres choses diverses" ...

kdbanman
la source
J'inclus également au moins ce que fait la méthode lorsque l'on parle de sa "spécification". Selon l'objectif de la journée, je peux ou non inclure les informations supplémentaires nécessaires pour mettre en œuvre la méthode.
un CVn du
@ MichaelKjörling, ce sont des préoccupations valables, mais ce sont des digressions assez importantes de ce que la plupart des programmeurs appellent une "signature". Ce que fait la fonction doit être inclus dans le nom de la fonction, donc il fait indirectement partie de la signature. Quoi qu'il en soit, je ne pense pas que le comportement ou l'implémentation de la fonction soit ce que le demandeur voulait. Je modifierai en conséquence s'il s'avère que c'est le cas.
kdbanman le
Signature oui, "spec" non. (FWIW, je pense que votre réponse est assez bonne et bien citée.)
un CVn du
Merci pour les commentaires. Je ne pense pas que la réponse soit aussi claire que «non». Cela dépend de ce que l'on entend par spécification - on pourrait certainement trouver une définition raisonnable de la spécification qui inclut le comportement de la fonction et les directives d'implémentation. Vous pouvez le faire dans votre propre réponse. Mais comme je l'ai dit, je ne pense pas que ce soit l'intention du demandeur.
kdbanman
1
A voté parce que, bien que non language-agnostic, les exemples C ++ sont (A) pertinents pour moi et (B) illustrent la confusion qui entoure si souvent la terminologie humaine
underscore_d
0

Je crois que le terme est "contrat". Il définit l'interface et ce qui est attendu de l'appelant et de l'appelé; cependant, il couvre également des choses comme les valeurs autorisées des paramètres, ce qui n'est pas quelque chose que de nombreux langages permettent de définir par la définition de la fonction ou de la classe, donc le terme "contrat" ​​pourrait avoir un sens plus large que ce que vous vouliez dire. Je l'ai vu dans plusieurs livres de programmation orientés objet et spécifiques à Java. Je ne sais pas si c'est spécifique à Java, mais je ne vois pas pourquoi cela devrait être. La signature est l'autre terme couramment utilisé, mais j'ai appris à aimer «contrat».

Andrew
la source
C'est la meilleure réponse si la question est vraiment le nom de "spec" de la fonction / méthode. La signature elle-même ne dit rien sur ce que fait réellement la méthode, la plage autorisée de paramètres, les contraintes non fonctionnelles et ainsi de suite ...
ch7kor