サブルーチン

出典: フリー百科事典『ウィキペディア(Wikipedia)』

サブルーチン: subroutine)は、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたものである。ソースコード上ではコードブロックを形作る。繰り返し利用されるルーチン作業モジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる。サブプログラム (subprogram) とも呼ぶ。

プログラムのソース中で、繰り返し現れる作業をサブルーチン化することで、可読性や保守性を高く保つことができる。繰り返し現れる作業でなくても、意味的なまとまりを示すためにサブルーチン化することもある。また、キャッシュのような階層的メモリの設計を持つコンピュータ(現在のパソコンワークステーションなどほぼすべて)では、よく使われるサブルーチンがキャッシュに格納されることで高速な動作を期待できる。

目次

[編集] 分類

サブルーチンを、結果として値を返すものと処理だけを行い値を返さないものに分類することがある。その場合、前者を関数(かんすう)、後者を手続き(てつづき)と呼んで区別する。プログラミング言語の仕様としてCのようにどちらかの呼び方のみを採るものと、Pascalのように両者を区別するものがある。

[編集] 関数

関数(function)が返す値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。functionが関数と訳されるのは、単に機能の実装を行うだけでなく、引数としてとりうる値の集合から、戻り値としてとりうる値の集合への写像のように捉えることができるためである。したがって、ほとんどの命令型プログラミング言語では次の点において数学の関数とは異なる。

  • 引数が同じでも状況に応じて戻り値が異なる(状態を持つ)
  • 関数の処理の実行によってシステムに変化が発生する(副作用を持つ)
  • 戻り値が存在しない場合がある

ただし、純粋な関数型言語における関数は、状態や副作用などをもたず、数学の関数に近い性質を持つ。

[編集] 各種プログラミング言語におけるサブルーチン

  • Excelでの関数は、主に、計算をしたり、データの検索や集計をしたり、表示を変換するものである。合計値を求めるSUM関数や、平均値を求めるAVERAGE関数など、100を超える関数が存在する。
  • Cでは、メインルーチン、サブルーチン問わずすべての処理単位は関数を定義する形で記述される。すべての関数は戻り値のを指定しなければならないため、戻り値が存在しない場合、戻り値がないことを表す特別な型であるvoid型が利用される。
  • Pascalでは、関数を記述する場合はfunction、手続きの場合procedureという予約語が用いられる。
  • 古典的なBASICでは、関数は言語仕様に組み込まれたものを利用するだけにとどまり、ユーザによる関数の追加、拡張はDEFFN命令などごく限られた範囲でしか行えない。
  • Java等、オブジェクト指向プログラミング言語では、メソッド(特定のオブジェクトあるいはクラスに属するサブルーチン)という仕組みを用いる。
  • Schemeでは関数ではなくて手続きと呼ばれる。入出力処理など、手続きが値を返すとは限らないからである。なおCommon Lispでは関数と呼ばれる。
  • Fortranではサブルーチンはsubroutine、値を返す(即ち式の項になれる)サブプログラムを「関数(function)」として区別している。通常は副作用を持つが、Fotran 90以降ではPURE属性を与えることで副作用を持たないことを明示できる。

[編集] 関連項目