(プログラミング)から転送)この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。subroutine)は、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたものである。繰り返し利用されるルーチン作業をモジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる。「サブ」をつけずに「ルーチン」と呼ぶこともある。プログラムのソース中で、繰り返し現れる作業をサブルーチン化することで、可読性や保守性を高く保つことができる。繰り返し現れる作業でなくても、意味的なまとまりを示すためにサブルーチン化することもある。キャッシュのような階層的メモリの設計を持つコンピュータ(現在のパソコンやワークステーションなどほぼすべて)では、よく使われるサブルーチンがキャッシュに格納されることで高速な動作を期待できる。プログラミング言語の仕様として、サブルーチンに相当する処理のまとまりを、結果として値を返すものと、処理だけを行い値を返さないものに分類・区別することがある。procedure)と呼んで区別する。Basicでは、前者をFunctionプロシージャ、後者をSubプロシージャと呼んで区別する。これらの名称は慣習的なものであり、手続き型プログラミングや関数型プログラミングといったプログラミングスタイルあるいはプログラミングパラダイムの分類とは関係がない。関数編集サブルーチンが返す値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。呼ばれるわけであるが、一般にプログラミング言語における関数は、数学におけるそれとは以下のような点が異なる。引数が同じでも状況に応じて戻り値が異なる(状態を持つ)関数の処理の実行によってシステムに変化が発生する(副作用を持つ)(「関数」と「手続き」を区別しない言語では)戻り値が存在しない場合があるこれに対し、関数型言語では状態や、プログラム自身に影響するような副作用をもたないことを基本とするなど、数学の関数に近い性質を持つ。純粋関数型言語では数学の関数と同等であり、同様の性質(参照透過性など)を持つことが利用される。各種プログラミング言語におけるサブルーチン編集サブルーチンという考え方は、ことさら新しいものではない。サブルーチンに関するチャプターである。Cでは、値を返さないものも含め全て「関数」である。実行したいコードは全て何らかの関数定義の中に記述しなければならない[1]。歴史的な理由から、値を返さない関数を宣言および定義する場合は、関数の型(返戻値の型)を書く場所にvoid(void型)と書く[2]。Pascalでは、値を返すものは関数、値を返さないものは手続きであり、それぞれfunctionまたはprocedureという予約語を使って宣言する[3]。命令によるサブルーチンがあった。命令の終わりの場所(アドレス)をインタプリタ内のスタックにプッシュして保存し、命令で指定された行に飛び、実行を続ける。命令の次の命令から実行を再開する。サブルーチンを作成したい場合は、ユーザーは「この行からこの行まではサブルーチンとする」と決めてプログラムを作成した。GOTO」でしかない(引数も返り値もローカル変数もない)ため、(グローバル)変数を経由する、配列をユーザースタックとして使うなど、技巧を必要とした。命令により、式一個で記述できる範囲という制限ながらも、引数と返り値のあるユーザー定義関数の追加(拡張)が行えるものもあった。JavaやC#等、オブジェクト指向プログラミング言語では、メソッド(特定のオブジェクトあるいはクラスに属するサブルーチン)として記述しなければならず、どこにも属さない関数(フリー関数)は定義できない、というものもある。Lispでも関数と呼ぶ。Schemeの仕様では手続きという用語を使っている。Lispにはサブルーチンをマクロで実装するという重要な手法もある。90以降ではPURE属性により副作用を持たないことを明示できる。Perlでは、ユーザー定義のものはサブルーチンであるが、引数を渡すことができ、値を返すこともできる。サブルーチン内からは、渡された引数には特殊変数からアクセスし、値を返すにはreturn文[4]を使う。Excelにおける関数は、主に、計算をしたり、データの検索や集計をしたり、表示を変換したりするものである。合計値を求めるSUM関数や、平均値を求めるAVERAGE関数、条件演算子に相当するIF関数など、100を超える組み込みの「ワークシート関数」が存在する。VBAコードからのみ利用可能な「VBA関数」もある。IIf関数[5]はIF関数に似た働きをするが、ワークシート上の数式内では利用できず、VBAからのみ利用可能である。ワークシート関数およびVBA関数はいずれもユーザー定義の関数を登録して利用することもできる。)など、「Cは関数型言語である」としている文献があるが、誤りである。標準化以前(K&R初版時代のC)は、省略した場合のデフォルトとしてintを返すと解釈される仕様だったという経緯があり、互換性を保つためにそれが標準とされたため、値を返さない場合にはvoidを書いて明示しなければならない、という仕様になっている。C言語と違い、中身の記述すなわち定義まで含むものもPascalでは「宣言」と言う。ように関数扱いになっている。(計算機科学)プロシージャ重複コードトランスクルージョンこの項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。3.0のもとで利用可能です。プライバシーデスクトップ。