メソッドと関数の違いについてGoogleで検索していたところ、2つの答えが得られました。
答え -1
メソッドは以下のようなノンリターン型
void Method()
{
}
Function は以下のような戻り値の型です
int Method()
{
}
答え - 2
これら 2 つの用語に違いはありません。
クエリ - 正しいのはどれですか。
違いはありません。
C# と Java では、通常、それらをメソッドと呼びます。JavaScript と C++ では、通常は関数と呼ばれます。
いずれにせよ、人々はあなたが何を意味するかを知るでしょう
回答 1 については、もし私がまったく新しいプログラマーで、その違いについて推測するように求められたとしたら、おそらくその回答 1 を思いつくでしょう。入力が出力を正確に決定するプロセスとして関数の数学的な定義が与えられた場合
あなたが本当に求めているのは、C#の関数とアクション(どちらもメソッド)の違いは何かということだと思います。
違いはvoidがどのように扱われるかに関係しています:これはそれをかなりよく説明していますhttps://softwareengineering.stackexchange.com/questions/131036/why-is-void-not-allowed-as-a-generic-type-in - c
クリックを節約するために、EricLippertの回答を完全に投稿します。
「void」の基本的な問題は、他の戻り型と同じ意味ではないということです。「void」は、「このメソッドが戻る場合、値をまったく返さない」ことを意味します。nullではありません。nullは値です。値を返しません。
これは本当に型システムを台無しにします。型システムは本質的に、特定の値に対してどの操作が有効であるかについて論理的な推論を行うためのシステムです。void returnメソッドは値を返さないので、「これに対してどの操作が有効ですか?」という質問があります。まったく意味がありません。有効または無効の操作があるための「もの」はありません。
さらに、これはランタイムを混乱させます。.NET runtineは、スタックマシンとして指定されている仮想実行システムの実装です。つまり、操作がすべて評価スタックへの影響という観点から特徴付けられる仮想マシンです。(もちろん、実際には、マシンはスタックとレジスタの両方を備えたマシンに実装されますが、仮想実行システムはスタックのみを想定しています。)voidメソッドの呼び出しの効果は、非voidメソッド。非voidメソッドは常に何かをスタックに置きますが、これはポップオフする必要がある場合があります。voidメソッドは、スタックに何かを置くことはありません。したがって、メソッドの戻り値が無視される場合、コンパイラはvoidメソッドとnon-voidメソッドを同じように扱うことはできません。
これらすべての理由から、「void」はインスタンス化できるタイプではありません。それには価値がありません、それがその要点です。オブジェクトに変換することはできません。また、voidを返すメソッドは、スタックを破損するため、voidを返さないメソッドで多形的に処理することはできません。
したがって、お気づきのように、voidを型引数として使用することはできません。これは残念です。とても便利です。
後知恵の恩恵を受けて、ボイドを返すメソッドが魔法のシングルトン参照型である「Unit」を自動的に返すのであれば、関係者全員にとってより良いでしょう。次に、すべてのメソッド呼び出しがスタックに何かを置くこと、すべてのメソッド呼び出しがオブジェクト型の変数に割り当てることができるものを返すこと、そしてもちろんUnitを型引数として使用できることを知っているので、 ActionとFuncのデリゲートタイプを別々にする必要はありません。悲しいことに、それは私たちがいる世界ではありません。
この静脈のいくつかのより多くの考えについては、を参照してください
http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx
と
http://blogs.msdn.com/b/ericlippert/archive/2011/02/21/never-say-never-part-one.aspx
と
http://blogs.msdn.com/b/ericlippert/archive/2011/11/28/why-have-a-stack.aspx
2つの用語に違いはありません。それらは、それらが何を意味するかという点で交換可能です。
アンマネージコード(C / C ++)を扱うとき、人々はそれらを関数と呼ぶことがわかりました。しかし、マネージコード(C#/ java)を扱うとき、人々はそれらをメソッドと呼びます。
これは本当に用語に依存します。最初の答えは間違っていませんが、100% 正しいとは考えない人もいます。この言葉function
は、メソッドからの戻りがある場合に使用される傾向があります。
したがって、基になるメソッドで次のことができます。
void DoSomething()
{
int i = Sum(1, 2);
}
次に、関数として決定できる return メソッドを用意します。
int Method(int i, int j)
{
return i + j;
}
したがって、あなたの質問に答えるには、どちらも正しくありません。多くの開発者が彼らの言うことを変える傾向があるので、それはあなたがそれらをどのように解釈するかです. ただし、VB.Net はSub
and Function
for メソッドを使用するため、VB.Net
バックグラウンドから来た場合は、戻りメソッドを関数として参照できます。
.NET ではこれらの用語はほぼ同義ですが、JavaScript などの言語では、意味が少し異なる場合があります。(js 用語) の例は、メソッドが通常、関数を含むオブジェクト プロパティであるということです。
また、ここでは、メソッドがクラスのメンバーとして定義されているのに対し、関数として示されている違いは機能のスタンドアロン ユニットであることを意味している場合があります。の。NET では、通常、「メソッド」という用語が「関数」よりも頻繁に使用されます (ただし、適切な名前の「無名関数」があります)。
ここには、関数とメソッドの違いに関する別の質問があり、詳細を確認することができます。
Answer 1
Pascal で似たようなものに出会ったことがあります。そこでは、人々は void メソッドのプロシージャーとメソッドを戻り値の型の関数と呼んでいました。
C# では、通常、両方ともメソッドと呼ばれます。functionという用語は通常、 delegatesのために予約されており、通常は関数とアクションに分けられます- そこでは、同様の用語を見つけることができますAnswer 1
。
多くの場合、人々は他の言語から用語を持ち込むため、私はこの単語を意図的に何度も使用してきましたが、私が書いたものは、C# 4.0 Unleashedのような印刷された C# 文献で最も頻繁に遭遇したものです。
これら 2 つの用語に違いはありません。
答え1だといつも思っていましたが、恥知らずに、とにかく時々それらを同じ意味で使用します。