SubとFunctionの違いとは?ポイントは戻り値?BASIC言語の変化や使い分けもプログラマーがわかりやすく解説
VBの元になったBASIC言語
image by iStockphoto
Visual Basic(VB)は1991年にマイクロソフトが公開しました。しかし、それ以前からマイクロソフトはBASICというプログラミング言語を独自にカスタマイズしたMS-BASICを公開しています。また、1985年にはQuickBASICを公開しました。VBはMS-BASICやQuickBASICを元に開発した新しい言語です。
そのため、VBにはMS-BASICやQuickBASICの影響を受けている部分も多くあります。SubとFuncitonがあるのもその名残りとも言えるのです。
よく使うものをまとめたサブルーチン
MS-BASICでは関数というものはなく、VBで言うSubしかありませんでした。それがサブルーチンです。プログラムの最初に実行される部分をメインルーチン、そこから呼ばれる部分をサブルーチンと呼びました。サブルーチンからサブルーチンを呼ぶこともあります。VBのプロシージャと同じですね。
この頃はサブルーチンの名前や引数もなく、行番号を指定して実行し、終わったら元の所に戻るという仕組みです。今のSubプロシージャや関数と比べると使いにくいものでした。
BASICから生まれ変わったVisualBasic
冒頭で説明したように、1991年にMS-BASICやQuickBASICを元にVisual Basic(VB)が登場します。BASICのオリジナルは1960年代の古い言語でした。VBは今では当たり前になった構造化プログラミングだけでなく、オブジェクト指向プログラミングに近い考え方まで導入したもの。Basicという名前は残っていますが生まれ変わった新しい言語です。
また元々はWindowsのアプリケーションを作るためのものでしたが、様々な派生版が登場します。例えば、Excelなどに内蔵されているVisualBasic for Application(VBA)やコマンドプロンプトで動くVB Script(VBS)などです。これらは細かい違いはありますが、プログラムの書き方は似ているので、同じように書くことができます。さらに強化されたVisual Basic.NETが最新版です。
サブルーチンと関数、ポイントは戻り値
VBになるまでの経緯や派生VBも見てきましたが、SubとFunctionの考え方はどれも同じです。BASICには元々サブルーチンというものがありました。サブルーチンは呼び出すだけで結果を返すような仕組みはありません。その名残りがSubプロシージャです。
その後、VBが登場した際、他の言語の考え方が導入されます。その1つが関数。SubとFunctuionは似ていますが成り立ちが違うのです。サブルーチン由来で何も戻さないSubと、他の言語から取り入れた関数由来のFunciton。戻り値の有無がポイントになります。
他の言語ではどうなっている?
VBではSubとFunctionは似ているけど違うものだと説明してきました。それでは他のプログラミング言語ではどうなのでしょう。実はVBのように別扱いになっている言語はあまりありません。
他のプログラミング言語では関数しかないものが多いです。そのような言語ではSubのような値を返さないものはどうするのでしょう。答えは「値がない」という特別なものを返すのです。それが「void(ヴォイド)」。voidとは英語で中身がないとか空っぽという意味。関数は何か返さなければいけないので「何もない」を返すというわけです。そういう意味ではVBの考え方はわかりやすいですね。
\次のページで「サブルーチンと関数の細かい違い」を解説!/