web-dev-qa-db-ja.com

「ルーチン」の技術的な定義は何ですか?

私は(LISPルーチンを行うために)LISP言語を勉強していて、一般的な文脈ではルーチンとは何かを知っていますが、技術的な文脈では、今ルーチンを学び始めているので、それについて話すことができます。それで、ルーチンの本当の定義は何ですか? (私はすでにこれを「グーグル」しましたが、何も見つかりませんでした)

23

routineという用語は、 subroutine に由来します。これは、BASICのような言語でより一般的な用語です。実際にサブルーチンを作成します。 (BASICには、実際にはSUBroutineとFUNCTIONの違いがありましたが、それでも...)

ウィキペディアのエントリから:

コンピュータサイエンスでは、サブルーチン(プロシージャ、関数、ルーチン、メソッド、またはサブプログラムとも呼ばれます)は、より大きなプログラム内のコードの一部です。特定のタスクを実行し、残りのコードから比較的独立しています。

「サブプログラム」という名前が示すように、サブルーチンは、より大きなプログラムまたは別のサブプログラムの1つのステップとして使用されるコンピュータープログラムとほぼ同じように動作します。サブルーチンは、他のサブルーチンからも含めて、プログラムの1回の実行中に複数回、および/または複数の場所から開始(「呼び出」)できるようにコーディングされ、その後、サブルーチンのタスクが完了したら、「呼び出し」ます。

異なる言語/環境/時代は異なるエコシステムを持っているため、同じ一般的な概念を説明するための異なる用語があります。私は最近、function(またはmethod「OOP」環境では)という用語のみを使用するのが一般的です。

ハッピーコーディング。


楽しみのために、私はコミュニティWikiを作成しました。以下のリストは、ルーチンを意味する特定の言語で使用するのに「正しい」(広く受け入れられている)用語を網羅していることを願っています。非公式にルーチンは、以下のすべての言語のコンテキストで使用されるため、使用される事実上の用語でない限り、省略してください。必要に応じて、自由に追加、修正、および注釈を付けてください。

  • C - 関数
  • Java -- メソッド 。関数もよく使用されますが、関数という用語は Java言語仕様 には表示されません
  • C#- メソッドと関数 。仕様では、関数は関数オブジェクトと無名関数を指します。これらは、型(クラスまたは構造)のメンバーであるメソッドと同じではありません。代理人も検討してください。
  • JavaScript -- 関数またはメソッド 。メソッドは、オブジェクトのプロパティを介してアクセスされる関数です。
  • Haskell - 関数 。これは受け入れられている用語です。
  • Scala -- 関数またはメソッドdef型のメンバーの場合、関数はファーストクラスの値です。
  • 基本-- 関数またはサブルーチン 。サブルーチンは値を返しません。参照による呼び出しをサポートします。
  • FORTRAN -- 関数またはサブルーチン 。サブルーチンは値を返しません。参照による呼び出しをサポートします。
  • LISP -- 関数 。 DEFUN-> DEfineFUNction、すべての形式は有効な式です。 macros も検討してください。これは、それ自体は関数ではありませんが、ほぼ間違いなくルーチンです。
  • VHDL -- サブプログラム:関数とプロシージャ 。プロシージャには戻り値はありません。
  • Smalltalk - メソッド
  • Python -- メソッド
  • Ruby -- メソッド (関数と交換されることがよくありますか?ラムダ/プロセスは異なると見なされる場合がありますか?)
  • Perl -- 関数とサブルーチン 。関数/サブルーチンを宣言するフォームは1つしかないため、w.r.tの区別はありません。戻り値。 (オブジェクトにバインドされた関数の)メソッドの使用は、他の言語よりも普及していないようです。
  • パスカル- 手順と関数
  • エイダ- 手順と関数
32
user166390

LISPに固有の技術的な定義がないため、技術的な定義を見つけることができません。寄席の外にある「ルーチン」は、関数の単なる別名です。私がLISPでフルタイムでプログラミングしてから何年も経ちましたが、誰もその用語を正式な方法で使用したり、一般的に使用したりすることはありませんでした。 「関数」、「マクロ」、「フォーム」について話しました。誰かが「ああ、パイの中のリンゴの数を計算するルーチンがあります」と言った場合、それは完全に非公式でした。

2
bmargulies