この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "サブルーチン"
プログラミングにおけるサブルーチン(英: subroutine)は、プログラム中で意味や内容がまとまっている作業をひとつにまとめたものである。サブプログラムあるいは副プログラム(英: subprogram)[1]とも呼ばれ、単に「ルーチン」(英: routine)と呼ばれることもある。プログラミング言語によっては、関数(英: function)やプロシージャあるいは手続き(英: procedure)とも呼ばれる。 繰り返し利用されるルーチン作業をモジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる。 プログラムのソース中で、繰り返し現れる処理をサブルーチン化することで、可読性や保守性を高く保つことができる。繰り返し現れる処理でなくても、意味的なまとまりを示すためにサブルーチン化することもある。また、キャッシュのような階層的メモリの設計を持つコンピュータ(現在のパソコンやワークステーションなどほぼすべて)では、よく使われるサブルーチンがキャッシュに格納されることで高速な動作を期待できる。 サブルーチンが結果として値を返す場合、その値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。 プログラミング言語によっては、サブルーチンに相当する処理のまとまりを、「結果として値を返すもの」と「処理だけを行ない値を返さないもの」に分類・区別することがある。この区分はプログラミング言語の仕様で定められるため、言語により区分や名称が異なる。例えば、Pascalでは戻り値があるものを関数と呼び、戻り値がないものを手続きと呼ぶ。C言語ではいずれも関数と呼ぶ。ALGOLではいずれも手続きと呼ぶ。これらは慣習的なものであり、手続き型プログラミングや関数型プログラミングといったプログラミングスタイルあるいはプログラミングパラダイムの分類とは関係がない。サブルーチンが属するスコープなどの特性によって名称を変えているものもあれば、特に区別せず同じ名称を与えているものもある。 日本の情報処理推進機構 (IPA) が運営している基本情報技術者試験で使われる疑似言語では、サブルーチンを戻り値の有無により「関数」と「手続」(てつづき)に分類している。戻り値があるほうが関数であり、戻り値が無いほうが手続である[1]。これはPascalの慣習と同じだが、もともとアルゴリズムの記述にはALGOLやPascal系の構文をもとにした疑似言語が使われることが多かった、という事情もある[2]。 なお、サブルーチンは呼び出し時に入力として引数(ひきすう)を受け取り、サブルーチンの中で宣言された「仮引数」と呼ばれる変数を通じて内部処理に使うことができる。引数の渡し方には、一般的なものとして以下の2つがある[3]。
概説
呼び出しと入出力
実引数を渡すときにその値だけを渡して、記憶場所(アドレス)は渡さない方法を「値呼び出し」または「値渡し」という。値呼び出しで変数を渡す場合、メインルーチンとは別にサブルーチン側で変数の記憶領域を確保し、そこにいったん値(データ)をコピーする。