私は(lispルーチンを行うために)lisp言語を勉強していて、一般的な文脈ではルーチンとは何かを知っていますが、技術的な文脈では、今ルーチンを学び始めているので、それについて話すことができます。それで、ルーチンの本当の定義は何ですか?(私はすでにこれを「グーグル」しましたが、何も見つかりませんでした)
2 に答える
ルーチンという用語は、サブルーチンに由来します。これは、実際にサブルーチンを作成するBASICなどの言語でより一般的な用語です。(BASICには、実際にはSUBroutineとFUNCTIONの違いがありましたが、それでも...)
ウィキペディアのエントリから:
コンピュータサイエンスでは、サブルーチン(プロシージャ、関数、ルーチン、メソッド、またはサブプログラムとも呼ばれます)は、特定のタスクを実行し、残りのコードから比較的独立している、より大きなプログラム内のコードの一部です。
「サブプログラム」という名前が示すように、サブルーチンは、より大きなプログラムまたは別のサブプログラムの1つのステップとして使用されるコンピュータープログラムとほとんど同じように動作します。サブルーチンは、他のサブルーチンからも含めて、プログラムの1回の実行中に数回および/または複数の場所から開始(「呼び出」)され、その後、次の命令に分岐(戻る)できるようにコーディングされることがよくあります。サブルーチンのタスクが完了したら、「呼び出し」ます。
言語/環境/時代が異なれば、生態系も異なるため、同じ一般的な概念を表す用語も異なります。私は最近、関数(または「OOP」環境ではメソッド)という用語のみを使用するのが一般的です。
ハッピーコーディング。
楽しみのために、私はコミュニティWikiを作成しました。以下のリストは、特定の言語でルーチンを意味するために使用するのに「正しい」(広く受け入れられている)用語を網羅していることを願っています。非公式にルーチンは、以下のすべての言語のコンテキストで使用されるため、使用される事実上の用語でない限り、省略してください。必要に応じて、自由に追加、修正、および注釈を付けてください。
- C-関数
- Java-メソッド。関数もよく使用されますが、関数という用語はJava言語仕様には含まれていません。
- C#-メソッドと関数。仕様では、関数は関数オブジェクトと無名関数を指します。これらは、型(クラスまたは構造)のメンバーであるメソッドと同じではありません。代表者も検討してください。
- JavaScript-関数またはメソッド。メソッドは、オブジェクトのプロパティを介してアクセスされる関数です。
- Haskell-関数。これは受け入れられている用語です。
- Scala-関数またはメソッド。タイプのメンバーの場合のメソッド
def
、関数はファーストクラスの値です。 - BASIC-関数またはサブルーチン。サブルーチンは値を返しません。参照による呼び出しをサポートします。
- FORTRAN-関数またはサブルーチン。サブルーチンは値を返しません。参照による呼び出しをサポートします。
- LISP-関数。DEFUN-> DEfineFUNction、すべての形式は有効な式です。また、それ自体は関数ではありませんが、ほぼ間違いなくルーチンであるマクロについても検討してください。
- VHDL-サブプログラム:関数とプロシージャ。プロシージャには戻り値はありません。
- SmallTalk-メソッド
- Python-メソッド
- Ruby-メソッド(多くの場合、関数と交換されますか?ラムダ/プロセスは異なると見なされる可能性がありますか?)
- Perl-関数とサブルーチン。関数/サブルーチンを宣言するフォームは1つしかないため、戻り値の区別はありません。メソッドの使用(オブジェクトにバインドされた関数の場合)は、他の言語よりも普及していないようです。
- パスカル-手順と機能
- Ada-手順と機能
lispに固有の技術的な定義がないため、技術的な定義を見つけることができません。寄席の外にある「ルーチン」は、関数の単なる別名です。私がLispでフルタイムでプログラミングしてから何年も経ちましたが、誰もその用語を正式な方法で使用したり、一般的に使用したりすることはありませんでした。「関数」、「マクロ」、「フォーム」について話しました。誰かが「ああ、パイの中のリンゴの数を計算するルーチンがあります」と言った場合、それは完全に非公式でした。