Wie heißt die Spezifikation einer Funktion / Methode?

21

Ich bin mir ziemlich sicher, dass es einen speziellen Namen für die 'Spezifikation' einer Funktion / Methode gibt. Es ist ein Wort, das sich bezieht

  • wie viele Argumente es braucht
  • die Reihenfolge der Argumente
  • Welche Argumente sind optional

Gibt es einen Namen dafür?

Callum
quelle
2
Es gibt verschiedene Arten von "Spezifikationen". Sie erwähnen Art, Reihenfolge und Notwendigkeit der Argumente. Zusammen mit dem Rückgabetyp wird dies als Typensignatur bezeichnet. Betrachten Sie den Namen der Funktion als Teil der Spezifikation? Wie wäre es mit einem Namespace wie einer Klasse, einem Paket, einem Modul usw.? Ist diese Spezifikation für Programmierer oder Maschinen? Siehe meine Antwort.
kdbanman
4
Ich bin überrascht, dass diese Frage vier enge Abstimmungen hat - es ist meiner Meinung nach eine absolut legitime Frage und durchaus beantwortbar (tatsächlich wurde sie bereits beantwortet).
Sleske
@callum, bitte bearbeite deine Frage so, dass sie nicht mehr so ​​eindeutig ist, so dass sie nicht markiert werden kann. Interessieren Sie sich für eine bestimmte Sprache? Eine Maschinenspezifikation oder eine Programmierspezifikation? Eine Spezifikation zum Aufrufen oder eine Spezifikation zur Implementierung?
kdbanman,
1
@ kdbanman Ich habe nur versucht, mich an das Wort "Signatur" zu erinnern. Es ist nicht mehrdeutig. Es ist nicht sprachspezifisch. Es wurde geantwortet. Es ist in Ordnung.
Callum
@callum, das habe ich mir gedacht. Danke für Ihre Antwort.
kdbanman

Antworten:

47

In der Regel wird dies als Typensignatur bezeichnet .

Eine Typensignatur enthält den Rückgabetyp der Funktion, die Anzahl der Argumente, die Argumenttypen oder Fehler, die möglicherweise zurückgegeben werden.

Kilian Foth
quelle
6
Meistens? Ich bin an "Prototypen" gewöhnt. Was anscheinend die
Typunterschrift
14
@Polyergic, Signatur ist allgemeiner als Prototyp (und in diesem Fall korrekter): Ein Prototyp deklariert eine Signatur. Insbesondere impliziert "Prototyp" eine Deklaration ohne Implementierung, wie in einer Java- oder C # -Methodendeklaration in einer interfaceoder einer C / C ++ - Funktionsdeklaration in einer Headerdatei (wörtlich a genannt prototype).
kdbanman
12
Auch arity ist ein weniger häufig verwendete Begriff nur für die Anzahl von Argumenten.
Sebi
^ Oh, das ist interessant! Das muss ich mir merken, wenn ich mich mit JS beschäftige, da ich nur Argumente habe, die mich leiten, keine Typen.
Underscore_d
23

TL; DR Sie sprechen wahrscheinlich von einer Funktionssignatur (oder Methodensignatur), von der ein Teil eine Typensignatur ist.

Aber es kommt wirklich darauf an, was man als Funktion "spec" ansieht. Ich interpretiere es als "alle Informationen, die ein Programmierer benötigt, um eine Funktion aufzurufen". Dazu gehören der Funktionsname, der Parametertyp, die Reihenfolge und die Notwendigkeit, möglicherweise der Rückgabetyp und möglicherweise sogar der Namespace dieser Funktion.

Ob all diese Dinge erforderlich (oder genau definiert) sind, hängt jedoch von der Sprache / Umgebung ab, die Sie verwenden. Wenn Sie die Definition in "Alle Informationen, die ein Computer zum Aufrufen einer Funktion benötigt" ändern , ist die Spezifikation wahrscheinlich anders 1 .

Genau genommen ist eine Funktions- (oder Methoden-) Signatur kein konsistenter Begriff, 2, 3, auch nicht in derselben Sprache. 4, 5, 6, 7 Aber es ist mit ziemlicher Sicherheit das gesuchte Wort, denn es wird von fast jedem Programmierer verstanden.


  1. C ++ Spec Draft n337, Definition 1.3.17, Signatur enthält keinen Rückgabetyp, da die Funktion nicht aufgelöst werden muss.

  1. "Signatur" enthält keine Namespace-Informationen
  2. „Unterschrift“ enthält Ausnahmen und Modifikatoren wie public, staticusw.

  1. C ++ - "Signaturen" enthalten keinen Rückgabetyp
  2. C ++ - "Signaturen" enthalten den Rückgabetyp.
  3. C ++ - "Signaturen" enthalten keinen Rückgabetyp, es sei denn, die Funktion ist die Spezialisierung einer Vorlage.
  4. C ++ - "Signaturen" enthalten Namespace- (Bereichs-) Informationen und "andere" Dinge ...

kdbanman
quelle
Ich würde auch zumindest angeben, was die Methode macht, wenn es um ihre "Spezifikation" geht. Je nach Tagesfokus kann ich zusätzliche Informationen zur Implementierung der Methode angeben oder auch nicht .
ein Lebenslauf vom
@ MichaelKjörling, das sind berechtigte Bedenken, aber das sind ziemlich bedeutende Abweichungen von dem, was die meisten Programmierer eine "Signatur" nennen würden. Was die Funktion tut, sollte im Funktionsnamen enthalten sein, damit es indirekt Teil der Signatur ist. Unabhängig davon denke ich nicht, dass Funktionsverhalten oder Implementierung das sind, was der Fragesteller beabsichtigt hat. Ich werde dementsprechend nacharbeiten, wenn sich herausstellt, dass er es getan hat.
kdbanman,
Unterschrift ja, "spec" nein. (FWIW, ich denke, Ihre Antwort ist ziemlich gut und gut zitiert.)
ein Lebenslauf vom
Danke für die Rückmeldung. Ich denke nicht, dass die Antwort so eindeutig ist wie "'spec' no". Es kommt darauf an, was unter Spezifikation zu verstehen ist - man könnte durchaus eine vernünftige Definition der Spezifikation finden, die das Funktionsverhalten und die Implementierungsrichtlinien enthält. Gerne können Sie das in Ihrer eigenen Antwort tun. Aber wie gesagt, ich glaube nicht, dass der Fragesteller dies beabsichtigt hat.
kdbanman
1
Positiv bewertet, weil language-agnosticdie C ++ - Beispiele für mich (A) relevant und (B) illustrativ für die Verwirrung sind, die so oft die menschliche Terminologie umgibt
underscore_d
0

Ich glaube, der Begriff ist "Vertrag". Es definiert die Schnittstelle und was von Anrufern und Angerufenen erwartet wird. Es werden jedoch auch Dinge wie zulässige Werte von Parametern behandelt, die nicht in vielen Sprachen durch die Funktions- oder Klassendefinition definiert werden können. Der Begriff "Vertrag" hat also möglicherweise eine breitere Bedeutung als das, was Sie gemeint haben. Ich habe es in mehreren objektorientierten und Java-spezifischen Programmierbüchern gesehen. Ich bin nicht sicher, ob es Java-spezifisch ist, aber ich verstehe nicht, warum es sein muss. Signatur ist der andere häufig verwendete Begriff, aber ich mochte "Vertrag".

Andrew
quelle
Dies ist die beste Antwort, wenn die Frage wirklich der Name für "spec" der Funktion / Methode ist. Die Signatur selbst sagt nichts darüber aus, was die Methode tatsächlich tut, erlaubte eine Reihe von Parametern, nicht funktionale
Einschränkungen