私はこの質問に答えるように求められました:
特定のインスタンス変数またはメソッドに関する詳細をユーザーに伝えたい場合、/** および */ の Javadoc 固有のコメント表記をどこに配置すればよいですか?
私は次のように答えました。
関数宣言の上。
答えは拒否され、これが理由でした:
関数は非オブジェクト指向言語です。メソッドは固有名詞です。
これは本当ですか?
関数は非オブジェクト指向言語だけにあるのですか?
いいえ。機能を持つオブジェクト指向言語があります。たとえば、C# はオブジェクト指向言語ですが、無名関数があります。
Java や C# などのオブジェクト指向言語で通常呼び出される型のメンバーである名前付きプロシージャは何ですか?
通常、メソッドは適切に呼び出されますが、これは言語によって異なります。Java や C# では「メソッド」と言います。
たとえば、Visual Basic では、型コンテナーに関連付けられているかどうかではなく、値を返すかどうかに基づいて、関数とサブルーチンが区別されます。
クラス継承ではなくプロトタイプ継承を使用するオブジェクト指向言語である JavaScript では、通常、上記のすべてを「関数」と呼びます。
Java や C# について何気なく話すとき、メソッドを関数と呼ぶことがよくありますか?
はい。私が文書を書いているのか、本を書いているのか、学術論文を書いているのかを注意深く区別します。ありふれた言い方をすれば、コンピュータ プログラミングの技術にある程度精通しているすべての人は、「関数」と「メソッド」がほぼ同義語であると理解するでしょう。私はあなたの答えを拒否しなかったでしょう。
これを特定の言語に制限する回答には、本質的に欠陥があります。さらに、静的メソッドとサブルーチンも効果的に処理する必要があります。
コンピューター サイエンスは「サブルーチン」という用語から始まりました。一般的なアクションを実行するために任意に実行できる反復可能なコードの小さなセクション。例は、BASIC などの初期のプログラミング言語で見られます。
関数はサブルーチンの進化でした。それらは引数を取り、値を返す場合と返さない場合があります。それらは、数学からいくつかの概念を取り入れています-入力は、特定の出力に変換されます。
オブジェクトでは、オブジェクトに対してアクションを呼び出すことができる必要があり、メソッドを公開することでこれを行います。関数と同様に、引数を取り、値を返す場合と返さない場合があります。
静的メソッドは、クラスの可能なすべてのオブジェクトに作用するように設計されています。
問題は、純粋なオブジェクト指向プログラミングでは、関数 (またはサブルーチン) を定義する余地がないことです。また、オブジェクト指向に進化した言語は、関数の構文を保持してメソッドを実装することがよくあります。
Java では、'Utility' クラスを使用して関数をpublic static
メソッドとして提供します。JavaScriptのMath
クラスは、この別の例です。
PHP では、function
メソッドを定義するために単語を使用することを許容しています。
C++ では、関数とメソッドの両方が見られますが、どちらも区別されていません。実際、C++ はメソッドを参照せず、それらをメンバー関数と呼んでいます。
関数は のようなものdoStuff();
です。
メソッドはsomeThing.doStuff();
またはのようなものSomeClass.doStuff();
です。
Java には、関数のようなものはありません。それらはすべてメソッドです。すなわち
class Test {
public static void doSomething() {...}
public void otherThing() {...}
public static void main(String[] args) {
doSomething(); //implied Test.doSomething();
}
public Test() {
otherThing(); //implied this.otherThing();
}
}