目次
サブルーチンとは
サブルーチンとは、まとまった処理をひとまとめにして、いつでもその処理を呼び出せるようにしたものを言います。
「コマンドの集合体」という言い方もできるでしょう。
サブルーチンの作り方・使用方法
サブルーチンは「call」コマンドとラベルを使って作ります。
1 2 3 4 5 |
call :[ラベル名(サブルーチン名)] :[ラベル名] [処理を書く] |
といった感じです。
例えば、100円の消費税と消費税込みの値段を求めるバッチプログラム(get_value.bat)をサブルーチンを用いて書いた例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off rem サブルーチンの呼び出し call :get_value exit /b rem 100円の消費税と消費税込みの値段を求めるサブルーチン :get_value echo; echo 100円(税別) set /a shohize=100/100*8 echo %shohize%円(消費税) set /a value=100+%shohize% echo %value%円(消費税込み) |
これを、実行すると、下図のような結果を得ます。
9行目から15行目に100円の消費税を求めて値段を表示する処理をまとめて書きました。これが、サブルーチンです。
9行目の「:get_value」ラベルがサブルーチン名であり、サブルーチンを呼び出すときはこの名前を指定することで呼び出すことができます。
このようにサブルーチン名を示すラベルの下に処理したいプログラムコードをまとめて書きます。
このサブルーチンの呼び出しは「call」コマンドを使って4行目で行っています。ちなみに、「call」コマンドの変わりに「goto」コマンドを使うこともできます。バッチファイルの動作としては、全く同じです。
引数を使用する
サブルーチンには引数の受け渡しも可能です。「引数」について知りたいかたは、「%1,%2…%X(引数とプレースホルダー) -コマンド別解説-」を参照下さい。
通常のバッチファイルを実行するようにラベルの後にスペースを挟んで引数を指定します。
1 |
call [ラベル] [第1引数] [第2引数] ... |
以下、前節のバッチファイルを任意の値段について消費税を求めるバッチファイル(get_value_any.bat)に編集しました。任意の値段は引数として指定するようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@echo off rem サブルーチンの呼び出し call :get_value 120 exit /b rem ???円の消費税と消費税込みの値段を求めるサブルーチン :get_value echo; echo %1円(税別) set /a shohize=%1*8/100 echo %shohize%円(消費税) set /a value=%1+%shohize% echo %value%円(消費税込み) |
4行目のサブルーチンの呼び出し時に引数「120」を指定して、サブルーチンに引き渡しています。サブルーチン内ではその引数を「%1」として参照できます。このあたりは通常のバッチファイルと同様です。
複数のサブルーチンを定義する場合
複数のサブルーチンを定義したい場合は、メインプログラムの下にまとめて書きます。
メインプログラムとは、サブルーチンを呼び出したりする処理の根幹となる処理部分です(「get_value_any.bat」でいうと、3行目から6行目)。
複数のサブルーチンを使用する場合、サブルーチンの処理の最後に「exit /b」を入れるのを忘れないようにしましょう。これがないと、その下に書いてあるコードまで実行してしまい、メインのプログラムに戻ってくれません。
「exit /b」は前節のプログラム(get_value_any.bat)の5行目に記述しているように、プログラムの終了を意味するコマンドですが、サブルーチン内で指定した場合はそのサブルーチンの終了を意味しメインのプログラムに戻ってくれます。
以下に、複数のサブルーチンを定義する場合のプログラムのひな型を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
call :[ラベル名] [引数...] call :[ラベル名] [引数...] … exit /b :[ラベル名] [サブルーチン処理内容] exit /b :[ラベル2] [サブルーチン処理内容] exit /b |
具体的な例として、前節のプログラム(get_value_any.bat)をさらに編集して、支払った金額からおつりを計算するようにしました。
支払った金額を計算し表示するサブルーチンを新たに加えます。支払った金額は引数として受け渡します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
@echo off rem サブルーチンの呼び出し call :get_value 120 call :pay_back 1000 exit /b rem 消費税と消費税込みの値段を求めるサブルーチン :get_value echo; echo %1円(税別) set /a shohize=%1*8/100 echo %shohize%円(消費税) set /a value=%1+%shohize% echo %value%円(消費税込み) exit /b rem おつりを求めるサブルーチン :pay_back echo; echo %1円支払いました。 set /a otsuri=%1-value echo おつりは%otsuri%円です。 exit /b |
4行目で消費税を含めた金額を計算するサブルーチンを呼び出し、続いて5行目でおつりのサブルーチンを呼び出しています。
おつりサブルーチン(pay_back)は消費税サブルーチン(get_value)の後に書いていますが、消費税サブルーチンの処理の最後には「exit /b」を記述しています(18行目)ので、これによってこの場所から上部のメインプログラムに戻ります。
これがないと、その下のおつりサブルーチンまで処理が行われてしまいますので、サブルーチンの最後には必ず「exit /b」を付けます。
以下、実行結果です。
コメント