関数/メソッドの「仕様」の名前は何ですか?


21

関数/メソッドの「仕様」には特別な名前があると確信しています。を指す言葉です

  • それが取る引数の数
  • 引数の順序
  • どの引数はオプションです

その名前はありますか?


2
いくつかの異なる種類の「仕様」があります。引数のタイプ、順序、および必要性について言及します。戻り値の型と合わせて、それを型シグネチャと呼びます。仕様の関数部分の名前を考慮していますか?クラス、パッケージ、モジュールなどの名前空間はどうですか?この仕様はプログラマーまたはマシン向けですか?私の答えをご覧ください。
kdbanman

4
私はこの質問に4つの近い投票があることに驚いています-それは完全に合法的な質問であり、私見であり、非常に回答可能です(実際、すでに回答されています)。
-sleske

@callum、フラグを外すことができるように、質問をあいまいにならないように編集してください。特定の言語に関心がありますか?マシン仕様ですか、プログラマー仕様ですか?呼び出しの仕様ですか、実装の仕様ですか?
kdbanman

1
@kdbanman「署名」という言葉を思い出そうとしていました。あいまいではありません。言語固有ではありません。答えられました。大丈夫です。
コールム

@callum、それが私が思ったことです。返信してくれてありがとう。
kdbanman

回答:


47

通常、これは型シグネチャと呼ばれます

型シグネチャには、関数の戻り値の型、引数の数、引数の型、または返される可能性のあるエラーが含まれます。


6
通常?私は「プロトタイプ」に慣れています。これは明らかに型シグネチャプラス名です- en.wikipedia.org/wiki/Function_prototype
ShadSterling

14
@Polyergic、署名はプロトタイプよりも一般的です(この場合はより正確です):プロトタイプは署名を宣言します。具体的には、「プロトタイプ」は、のJavaまたはC#メソッドの宣言interface、またはヘッダーファイルのC / C ++関数宣言(文字通り)と同様に、実装のない宣言を意味しますprototype
kdbanman

12
また、アリティは引数の数に対してあまり一般的に使用されない用語です。
セビー

^おお、それは面白いものだ!私はJSに手を出したとき、型ではなく引数をカウントするだけなので、覚えておく必要があります。
underscore_d

23

TL; DRおそらく関数シグネチャ(またはメソッドシグネチャ)について話しているでしょう。その一部は型シグネチャです。

しかし、実際には関数の「仕様」と考えるものに依存します。「プログラマーが関数を呼び出すために必要なすべての情報」と解釈します。これには、関数名、パラメーターの型、順序、必要性、おそらく戻り値の型、そしておそらくその関数の名前空間も含まれます。

しかし、これらすべてが必要であるか(または明確に定義されている場合でも)、使用している言語/環境によって異なります。また、定義を「マシンが関数を呼び出すために必要なすべての情報」に変更すると、仕様が異なる可能性があります1

厳密に言えば、関数(またはメソッド)シグネチャは一貫した用語ではなく、同じ言語内でも2、3です。4、5、6、7 しかし、それは、ほぼすべてのプログラマが理解されるだろうから、それは、ほぼ確実にあなたが探している言葉です。


  1. C ++ Spec Draft n337、定義1.3.17、署名には戻り値の型が含まれていません。関数を解決する必要がないためです。

  1. 「署名」には名前空間情報は含まれません
  2. 「署名は」のような例外や修飾を含みpublicstaticなど、

  1. C ++の「署名」には戻り値の型は含まれません
  2. C ++の「署名」に、戻り値の型含まれます。
  3. C ++の「署名」には、関数がテンプレートの特殊化でない限り、戻り値の型は含まれません。
  4. C ++の「署名」には、名前空間(スコープ)情報と「その他の」ものが含まれます...


また、メソッドの「仕様」について話すときは、少なくともメソッドが行うことも含めます。その日の焦点に応じて、メソッドを実装するために必要な追加情報を含める場合と含めない場合があります。
CVn

@MichaelKjörling、これらは有効な懸念事項ですが、これらはほとんどのプログラマーが「署名」と呼ぶものからのかなり重要な余談です。関数が行うことは、関数名に含める必要があります。したがって、間接的に署名の一部になります。とにかく、私は関数の振る舞いや実装が質問者の意図したものだとは思いません。彼が行ったことが判明した場合、それに応じて編集します。
kdbanman

署名はい、「仕様」いいえ。(FWIW、あなたの答えは非常によく、引用されていると思います。)
CVn

フィードバックをお寄せいただきありがとうございます。答えは「 'spec' no」ほど明確ではないと思います。それは仕様の意味に依存します-機能の振る舞いと実装のガイドラインを含む仕様の合理的な定義を確かに思いつくことができます。あなた自身の答えでそれをすることを歓迎します。しかし、私が言ったように、私はそれらが質問者が意図したものだとは思わない。
kdbanman

1
していないが、ためUpvoted language-agnostic、C ++の例は、(A)私と(B)は、多くの場合、人間の専門用語を囲む混乱の説明に関連している
underscore_d

0

この用語は「契約」だと思います。インターフェイスと、呼び出し元と呼び出し先に期待されることを定義します。ただし、多くの言語が関数またはクラス定義で定義できるものではないパラメーターの許容値なども対象となるため、「契約」という用語は意味よりも幅広い意味を持つ場合があります。私はいくつかのオブジェクト指向およびJava固有のプログラミング本でそれを見てきました。Java固有かどうかはわかりませんが、なぜ必要なのかわかりません。署名は他の一般的に使用される用語ですが、「契約」が好きになりました。


質問が実際に関数/メソッドの「仕様」の名前である場合、これが最良の回答です。署名自体は、メソッドが実際に行うこと、パラメータの範囲、非機能的
制約
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.