各種プログラミング言語におけるサブルーチン
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 09:56 UTC 版)
「サブルーチン」の記事における「各種プログラミング言語におけるサブルーチン」の解説
サブルーチンという考え方は、ことさら新しいものではない。アルゴリズムなどにおいて、問題を部分問題に切分けて解くという分割統治法はコンピュータ以前からあり、コンピュータプログラミングについても、EDSACのプログラミングについて出版された、この分野の世界最初の書籍とされる The Preparation of Programs for an Electronic Digital Computer(1951)においても part one, chapter 2 がサブルーチンに関するチャプターである。 Cでは、値を返さないものも含め全て「関数」である。また、実行したいコードは全て何らかの関数定義の中に記述しなければならない。また、歴史的な理由から、値を返さない関数を宣言および定義する場合は、関数の型(返戻値の型)を書く場所にvoid(void型)と書く。 Pascalでは、値を返すものは関数、値を返さないものは手続きであり、それぞれfunctionまたはprocedureという予約語を使って宣言する。 古典的なBASICでは、GOSUB 命令によるサブルーチンがあった。インタプリタは GOSUB 命令を見つけると、GOSUB 命令の終わりの場所(アドレス)をインタプリタ内のスタックにプッシュして保存し、命令で指定された行に飛び、実行を続ける。その後、実行中に RETURN 命令を見つけると、スタックから先ほど保存しておいた呼び出し元の場所をポップして取り出し、そこに飛び、GOSUB 命令の次の命令から実行を再開する。サブルーチンを作成したい場合は、ユーザーは「この行からこの行まではサブルーチンとする」と決めてプログラムを作成した。以上のように「RETURN できる GOTO」でしかない(引数も返り値もローカル変数もない)ため、(グローバル)変数を経由する、配列をユーザースタックとして使うなど、技巧を必要とした。比較的高機能な実装では、DEFFN 命令により、式一個で記述できる範囲という制限ながらも、引数と返り値のあるユーザー定義関数の追加(拡張)が行えるものもあった。 JavaやC#等、オブジェクト指向プログラミング言語では、メソッド(特定のオブジェクトあるいはクラスに属するサブルーチン)として記述しなければならず、どこにも属さない関数(フリー関数)は定義できない、というものもある。 LISPでは関数と呼ばれることが多く、Common Lispでも関数と呼ぶ。しかしSchemeの仕様では手続きという用語を使っている。なおLispにはサブルーチンをマクロで実装するという重要な手法もある。 Fortranではサブルーチン (subroutine) と、値を返す(すなわち式の項になれる)関数 (function) を区別する。通常は副作用を持つが、Fortran 90以降ではPURE属性により副作用を持たないことを明示できる。 Perlでは、ユーザー定義のものはサブルーチンであるが、引数を渡すことができ、値を返すこともできる。サブルーチン内からは、渡された引数には特殊変数からアクセスし、値を返すにはreturn文を使う。 Microsoft Excelにおける関数は、主に、計算をしたり、データの検索や集計をしたり、表示を変換したりするものである。合計値を求めるSUM関数や、平均値を求めるAVERAGE関数、条件演算子に相当するIF関数など、100を超える組み込みの「ワークシート関数」が存在する。一方、VBAコードからのみ利用可能な「VBA関数」もある。例えばIIf関数はIF関数に似た働きをするが、ワークシート上の数式内では利用できず、VBAからのみ利用可能である。ワークシート関数およびVBA関数はいずれもユーザー定義の関数を登録して利用することもできる。
※この「各種プログラミング言語におけるサブルーチン」の解説は、「サブルーチン」の解説の一部です。
「各種プログラミング言語におけるサブルーチン」を含む「サブルーチン」の記事については、「サブルーチン」の概要を参照ください。
- 各種プログラミング言語におけるサブルーチンのページへのリンク