web-dev-qa-db-ja.com

Javaメソッドと関数

私は、MATLABプログラミングスキルをより一貫した厳密なJavaコーディングと統合することを決定しました。したがって、それがあまりにも単純な質問にならないことを願っています。

他の多くのプログラム言語のように、Javaがmethodsではなくfunctionsとして関数を参照する理由が本当かどうか知りたいのですが。

これは、C/C++などの手続き型言語と比較して、内部のOOP Javaの性質によるものですか?それとも他に重要な(または微妙な)理由がありますか?

前もって感謝します。

12
fpe

私の意見では、この図 http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif

one, two and three dimensional method dispatch

from http://www.jot.fm/issues/issue_2008_03/article4/ OOと手続き型プログラミングの主な違いの1つを理解するのに役立ちます。基本的にはそれ

手続き型プログラミングは、計算単位を名前に関連付けるための1つの次元のみを提供します。ここで、プロシージャコールまたは名前は、プロシージャ実装に直接マップされます。図では、m1を呼び出すと選択肢がなくなり、m1プロシージャの実装のみが呼び出されます。

ながら

オブジェクト指向プログラミングは、名前解決のもう1つの側面を手続き型プログラミングの次元に追加します。メソッドまたはプロシージャ名に加えて、メッセージディスパッチでは、メソッドを検索するときにメッセージレシーバーが考慮されます。図2bには、メソッドm1の2つの実装が示されています。適切な方法の選択は、メッセージ名m1だけでなく、実際のメッセージの受信者、ここではRyにも依存します。

図(c)の3番目のセクションは、サブジェクト指向プログラミングを参照しており、オブジェクト(呼び出されたメソッド)の動作は、オブジェクトのステータスだけでなく、それを呼び出している(または監視している)サブジェクトにも依存しています。 。しかし、これは実際にはあなたの質問の範囲外です。

3
Sindico

メソッドと関数には少し違いがあります。

関数は、その名前でいつでも呼び出すことができる単なるコードであり、パラメーターとしても知られている引数をそれに渡すことができます。また、任意の関数の結果、つまり関数の戻り値を取得することもできます。

ただし、メソッドはその名前で呼び出されるコードですが、任意のオブジェクトに関連付けられています。パラメータをメソッドに渡すこともでき、メソッドから戻り値を取得することもできますが、それらは常に関連付けられます。 いくつかのオブジェクト

編集済み

Javaはオブジェクト指向であるため、Javaコードをクラスなしで実行することはできませんが、ほとんどの場合、C++ではクラスなしでコードを実行できます。したがって、Javaクラスがあり、コードはクラスで記述されるため、オブジェクトに関連付けられるため、関数ではなくメソッドと呼ばれます。

ただし、C++では、値を明示的に渡すことで呼び出すことができる関数を使用できます。

簡単に言うと、メソッドはオブジェクトに関連する関数です。

4
gprathour

この1つで多くの不要なドラマを考えるのは仕方ありません。 「メソッド」は確かに単なる名前であり、Javaは、パラメータを必要とする場合と必要としない場合があり、値を返す場合と返さない場合があるサブルーチンで使用することがありますか?

例えば。有効な「メソッド」は、OO純度、「関数」の標準的な定義など)に入ることなく、次のようになる可能性があります。以下の両方で、オブジェクトの現在の「状態」(インスタンス変数値)それらの実行でも:

// kind of a function, returns a value
public int calculateStuff(int param1)

// more of a procedure, presumably just "does stuff", returns nothing
public void doStuff(int param1)
1
Brian

彼らは同じです。 C++は通常、それらを関数と呼びます。 Javaは通常、それらをメソッドと呼びます。

メソッドは通常、クラスに関連付けられています。

メソッドである「クラス関数」も時々聞こえます。

それは重要ではありません、あなたが彼らをどちらに呼んでも、人々はあなたが何を話しているかを知っています。

0
Captain Skyhawk