Future BASICのプログラム構造


 Future BASICはいくつか好みに合わせて(?)プログラムを記述する形式を選択できます。Future BASICで巨大なプログラムを作るのは避けた方がいいと思われます。大規模なプログラムを作成したり、同じ関数を使い回しする方法は、私は使用したことがないため説明は省いてあります。あらかじめ、ご了承下さい。


◆従来の方式
 今までにBASICでプログラムを作った人には、おなじみの行番号を使った方式です。例えば"ABC"を延々と表示し続ける場合は、

10 PRINT "ABC"
20 GOTO 10

 といった具合になります。まず10行目でABCという文字を表示させています。次の20行目で最初の10行に戻れ、という命令があります。つまり、ひたすらABCの文字を表示し続ける事になります。
 短いプログラムならば、この方法でも構いません。しかし、ちょっとプログラムが大きくなってくると、行番号の管理やプログラムが、どこで何をしているのか、わかりにくくなります。
 この改善策として「構造化」するという方法があります。次の項では「構造化」について解説しましょう。



◆構造化方式
 構造化というと難しそうに聞こえますが、プログラムを見やすくするための1つの方法だと考えてください。後々、修正しやすいようにコメント(注釈)をきちんと入れておき、意味不明な変数名や番号を使用せずに、わかりやすい変数名と定数を使用するようにします。
 先ほどのABCを延々と表示し続けるプログラムを行番号を使用しないで構造化されたものにしてみます(あくまでも1例です。他にも方法があります)。

WHILE _true
PRINT "ABC"
WEND

 太字になっているのが命令で斜体になっているのは定数です。WHILE〜WEND命令は条件が成立している場合WHILEとWENDの間を繰り返し処理します。この場合、ABCという文字をひたすら表示し続ける事になります(定数_trueについては別の所で説明します)。
 Future BASICでは、これに加えて「関数形式」でプログラムの塊(これをルーチン、サブルーチンと呼びます)ごとに処理を分けるようになっています。これにより、プログラムのどこからでも参照でき、他のプログラムを作成する時にも使い回しができるようにしています。
 次の項で処理毎に部品化する「関数形式」の定義方法と呼び出し方について説明します。



◆関数の定義方法
 関数を定義するには以下のようになります。

LOCAL FN 関数名
処理
END FN

 もし関数が外部からの値(文字や数値)を必要とする場合は以下のようになります。

LOCAL FN 関数名(引数1,引数2,...,引数n)
処理
END FN

 関数が何か値を返す場合は以下のようになります。

LOCAL FN 関数名(引数1,引数2,...,引数n)
処理
END FN = 値

 値は直接数値でも構いませんが、通常はローカル変数又はグローバル変数が指定されます。返り値には、数値変数だけではなく文字列変数、つまり文字も返す事ができます。ただし、この場合は関数名の後に$マークを付けておく必要があります。

 このように、処理単位毎に関数にしておきます。これらの関数を呼び出す場合は以下のようになります。

FN 関数名

 引数がある場合は次のようになります。

FN 関数名(引数1,引数2,...,引数n)

 関数から返り値がある場合は次のようになります。

変数名 = FN 関数名(引数1,引数2,...,引数n)

 基本的にはこのようにして使用します。

注意
Future BASIC (II)では、呼び出される関数は呼び出される関数よりも先に定義されていなければなりません。先に定義されていない場合は、未定義エラーになってしまいます。