用語の具体的な意味は何ですか:関数、メソッド、プロシージャ、およびサブルーチン?


11

コードの関連部分をグループ化するために使用する用語の具体的な違いは何でしょうか。私は時々、同じ意味で使用されている用語を見てきました。多くのオブジェクト指向言語は、メソッドを定義するためにキーワード「関数」を使用しています。(なぜ?)

正確にしたい場合、それぞれの具体的な意味は何ですか?それとも、各言語がそれを呼び出すために選択したものだけですか?


functionメソッドの使用について私が知っている唯一の2つの言語はJavaScriptとPHPです。どちらも非メソッド(フリー関数)に同じキーワードを使用しており、JavaScriptの場合、少なくとも言語レベルでは、関数とメソッドの区別は実際にはありません。

例:VB.Netでは、戻り値SubはありFunctionません。ではPython、どのクラスにも属さない関数を使用できるため、メソッドではありません。関数内で関数を宣言することもでき、C#でも宣言できます。リンゴとパイナップルが同じ理由で名前が異なる場合があります。それらが異なるためです。
ジョブ

これまでに矛盾点があると思わせるものは何ですか?
JeffO 2016年

回答:


20
  • サブプログラム、サブルーチン
    「サブルーチン」は、おそらくアセンブリ言語から来ています。一部のプロセッサには、コードを編成し、コードの共通セクションを再利用する方法として、サブルーチンをサポートする命令が含まれています。たとえば、6502プロセッサには、JSR(サブルーチンへのジャンプ)およびRTS(サブルーチンからの戻り)命令がありました。プログラムは、サブルーチンやサブプログラムと呼ばれることもあるコード単位の階層である構造化プログラミングでもよく使用されていることを覚えています。IMO、これらは、特定のタスクを完了するために制御が一時的に転送されるコードのユニットの最も一般的な用語です。

  • 関数、手順
    これらはしばしば同じ意味で使用されますが、一部の言語では違いがあります。Pascalでは、関数は値を返すサブプログラムですが、プロシージャは返さないサブプログラムです。Cおよび関連言語では、すべてのサブプログラムに戻り型があるvoidため(それがであっても)、区別はありません。

  • メソッド、メンバー関数
    これらは同じものの2つの名前です。基本的には、特定のクラスまたはオブジェクトに関連付けられている関数です。

  • 演算子
    すべての言語には、一連の組み込み演算子があります。C ++などの一部の言語では、演算子はオーバーライド(つまり、置換)やオーバーロード(つまり、新しい型に対して定義)できる関数です。

  • 無名関数
    これは、名前のない関数を指します。匿名関数は、基本的にコードのブロックであり、変数に割り当てたり、パラメータとして渡して、たとえば完了ルーチンなどの後で使用することができます。

  • クロージャー、ラムダ式、ブロック
    クロージャーは、一連の変数にバインドされるコードのチャンクです。クロージャは、匿名の関数とコンテキストであると考えています。


4
すべての言語に演算子が組み込まれているわけではありません。SchemeやHaskellのように、 '+'や '>> ='のような名前で関数を定義できるものもあります。また、一部の言語(Schemeなど)では、「関数」は参照透過性を意味することを追加する必要があります(たとえば、副次作用のない同じ入力に対して常に同じ値を返します)プロシージャはそうではありません。そうでなければ、素晴らしい答えです。
Tikhon Jelvis

これまでのところ、「演算子」は主に2つの引数を持つ関数に使用されていたことを覚えています。それらはインフィックスでした(引数間の演算子:)2 + 2++arg(prefix)やarg++(postfix)のような1引数のような小さな例外があります。私は見ていない、が、多くの後置演算子...
DarekNędza

-1

言語によって異なりますが、言語で何ができるかは

  • 区別が必要ですか
  • コードについて話すとき、構文に違いがありますか、それとも単に便利ですか?

AFAIK、Basicでは、何も返さないものを呼び出すが、印刷、ファイルへの書き込み、グローバル変数の変更などの副作用を伴うジョブを実行する場合、プロシージャと呼ばれていました。

何かを返す場合、それは関数と呼ばれていました。

JavaのようなOOP言語では、「関数」という用語に出会うことはめったにありませんが、「メソッド」であり、関数はグローバルであり、誰でも呼び出すことができるものであることが教えられました。

関数型およびOOP言語のscalaでは、メソッドは関数とは呼ばれませんが、そのようなものを別のメソッドに渡して、関数にすることができます。

サブルーチンは、私が理解している別のルーチンから呼び出されるルーチンです。

要約すると、私はすべての言語について簡潔な定義があるとは思いません。これらの用語を使用する場合は、特定のカルチャーを考慮に入れる必要があります。まず、定義を紹介する必要があります。


-1

文脈に応じて、これらの単語はすべて同じことを意味することもあれば、大幅に異なることを意味することもあります。そのため、具体的な定義を与えることは難しく、コンテキスト(プログラミング言語)が既知でない限り、あまり多くを想定しないことが賢明です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.