サブルーチンを使う事で断片的なプログラムを書くことができる。
効果
- 同じような処理をサブルーチンにすることで、プログラムが短くなる。
- プログラムをブロックごとに見通すことでバグの発見に役立つ
- 汎用化されたサブルーチンは、他のプログラムで再利用できる。
サブルーチンの種類
手続き型 と 関数型 の2種類がある。
手続き型 返り値がない
関数型 返り値がある
何か値を返す処理には、関数型を使う。
手続き型サブルーチン(Procedure)は以下のように書きます。
PROCEDURE サブルーチン名(パラメータ変数:変数の型;パラメータ変数:変数の型
...)
VAR
変数宣言;
BEGIN
文;
END;
例 指定した回数の警告音を鳴らすサブルーチン
PROCEDURE DoBeep(count:INTEGER);
VAR
i:INTEGER;
BEGIN
FOR i:=1 TO count DO
Sysbeep;
END;
メインプログラムの中でこのサブルーチンを呼び出す時は、
サブルーチン名とパラメータを書きます。
サブルーチン名(パラメータ);
例
DoBeep(3);
サブルーチンの名前が間違っていたり、パラメータの数や変数の型が合っていないとエラーになります。
悪い例
DuBeep(3); サブルーチンの名前が違う
DoBeep(2,4); パラメータの数が多い
DoBeep('Hellp'); 変数の型が違う
サブプログラム内の変数を使わないときは、変数宣言を省略できる。
また、パラメータが無い場合も省略できます。
例 変数とパラメータを使わないサブルーチン
PROCEDURE DoBeep;
BEGIN
SysBeep;
END;
[複数のパラメータを持つサブルーチン] 
パラメータの数が複数ある場合は、セミコロン(;)で区切った後に連続して書きます。
PROCEDURE Compare(value1:REAL;value2:REAL);
BEGIN
IF value1=value2 THEN
SysBeep
END;
変数の型が同じ場合に限り、カンマ(,)で区切ってひとくくりにできる。
PROCEDURE Compare(value1,value2:REAL);
BEGIN
IF value1=value2 THEN
SysBeep
END;
[値を返すパラメータ] 
パラメータで渡した変数の値をサブルーチン内で変更し、戻させる為には
パラメータの前に 「VAR」を書きます。
(サブルーチン1)
PROCEDURE Sub(value:REAL);
BEGIN
value:=100;
END;
(サブルーチン2)
PROCEDURE Sub(VAR value:REAL);
BEGIN
value:=100;
END;
このサブルーチン1と2の違いは、パラメータ「value」をVAR宣言してるかどうかだけです。
実際にメインプログラムでサブルーチンを呼び出すと、以下のような結果になります。
(サブルーチン1の場合)
BEGIN
x:=0;
Sub(x);
END;
このプログラムを実行すると、xの値は0のままです。
VAR宣言していないので、サブルーチン内でパラメータ変数を変更しても、呼び出し側(メインプログラム)の変数は変わりません。
(サブルーチン2の場合)
BEGIN
x:=0;
Sub(x);
END;
このプログラムを実行すると、xの値は100に変わります。
VAR宣言しているので、呼び出し側(メインプログラム)の変数が変わります。