「サブルーチン」の版間の差分

削除された内容 追加された内容
編集の要約なし
20行目:
* サブルーチンという考え方は、ことさら新しいものではない。[[アルゴリズム]]などにおいて、問題を部分問題に切分けて解くという[[分割統治法]]はコンピュータ以前からあり、コンピュータプログラミングについても、[[EDSAC]]のプログラミングについて出版された、この分野の世界最初の書籍とされる ''The Preparation of Programs for an Electronic Digital Computer''(1951)においても part one, chapter 2 がサブルーチンに関するチャプターである。
* [[Microsoft Excel|Excel]]での関数は、主に、計算をしたり、データの検索や集計をしたり、表示を変換するものである。合計値を求めるSUM関数や、平均値を求めるAVERAGE関数など、100を超えるワークシート関数が存在する。IFに似た働きをするIIFといった[[VBA]]関数もある。
* [[C言語|C]]では、値を返さないものも含め全て「関数」である。また、実行したいコードは全て何らかの関数定義の中に記述しなければならない<ref>このためか、『<font size="-1">ANSI/ISO/JIS対応</font> ANSI C言語/C++辞典』{{要ページ番号|date=2016年9月}}(p.83(平林雅英、技術評論社)など、「Cは[[関数型言語]]である」としている文献があるが、誤りである。</ref>。また、歴史的な理由から、値を返さない関数を宣言および定義する場合は、[[void (コンピュータ)|void型]]を戻り値として使用する<ref>標準化以前(K&R初版時代のC)は返り値の型を省略すると既定でintを返すと解釈される仕様だったという経緯があり、互換性を保つためには値を返さないことをvoid型の戻り値によって明示しなければならない。</ref>。
* [[Pascal]]では、値を返すものは関数、値を返さないものは手続きであり、それぞれ<code>function</code>または<code>procedure</code>という[[予約語]]を使って宣言する<ref>C言語と違い、中身の記述すなわち定義まで含むものもPascalでは「宣言」と言う。</ref>。
* 古典的な[[BASIC]]では、GOSUB 命令によるサブルーチンがあった。インタプリタは GOSUB 命令を見つけると、GOSUB 命令の終わりの場所(アドレス)をインタプリタ内の[[スタック]]にプッシュして保存し、命令で指定された行に飛び、実行を続ける。その後、実行中に RETURN 命令を見つけると、スタックから先ほど保存しておいた呼び出し元の場所をポップして取り出し、そこに飛び、GOSUB 命令の次の命令から実行を再開する。サブルーチンを作成したい場合は、ユーザは「この行からこの行まではサブルーチンとする」と決めてプログラムを作成した。以上のように「RETURN できる GOTO」でしかない(引数も返り値もローカル変数もない)ため、(グローバル)変数を経由する、配列をユーザスタックとして使うなど、技巧を必要とした。比較的高機能な実装では、DEFFN 命令により、式一個で記述できる範囲という制限ながらも、引数と返り値のあるユーザ定義関数の追加(拡張)が行えるものもあった。