BASIC 「超」入門
以前に
BASIC の「超」基本
で、プログラムの入力と実行までを簡単に書いてみたのですが、今回は BASIC で使える命令をいくつか説明してみます。
BASIC という言語には制御構造なんてありません。古のフローチャートで示されるように必要に応じて特定の行番号に「飛ぶ(GOTO)」ことしか出来ません。
GOTO <行番号>
条件によって動作を変えるには IF文を使います。
IF <条件式> THEN <条件が成立したら実行する命令>
この THEN 以下の部分で変数に値を代入するだけの事もありますが、大抵はここで GOTO を実行して、いくつかの処理を書いていきます。IF で指定した条件がかけるのは同じ行のみなので END IF というものはありません。また BASIC によっては、THEN に続いて条件が成立しなかったときに実行される ELSE を書くことができるものもあります。
BASIC で制御構造と呼べるものとして FOR 文があります。
FOR <変数>=<初期値> TO <終了値> STEP <変化値>
…
NEXT <変数>
という構文で STEP が 1 の場合は STEP 以降は省略できます。FOR 文で指定した変数に初期値が代入され、その後 NEXT 文が実行された時点で、変数に STEP で指定した値が足されて終了値までの範囲であれば FOR の次から実行が繰り返されます。NEXT で変数は省略できることが多いのですが、変数がなければ最後に実行された FOR 文が対応するものであると解釈されます。ここで変数を書いておくと最後に実行した FOR 文の変数と異なるとエラーになるわけです。
重要な点は、このループ構造は実行された順序で決まるのであって、プログラムの行番号で示される位置とは関係ないことです。GOTO で別な場所に飛んでから NEXT を実行しても構いませんし、対応する NEXT が複数あっても BASIC は知らんぷりです。
関数を作る仕組みもあるにはあるのですが、ほとんど使われることはなく、もっぱらサブルーチンで繰り返し使うような処理を書きます。サブルーチンに名前をつけるような文法はなく、単に特定の行番号に GOSUB で飛ぶだけです。
GOSUB <行番号>
…
RETURN
GOSUB で飛んだ後に RETURN に出会うと、最後に GOSUB を呼んだ次の行に戻って実行を続けます。変数はすべてグローバル変数ですので、引き数や戻り値といった仕組みは不要で、必要に応じて呼び出し前に変数に値を入れて、戻ってきたらサブルーチンで代入された変数の値を使うだけです。
ここでも注意が必要なのは、行番号上のプログラムの位置は関係なくて、あくまで実行した順序で RETURN されるのです。このあたりはインタプリタならではの文法なのですが、モダンな言語と違うところでもあるので、ビックリしないようにしてください。
最後にひとつの行に複数の命令を書きたい時には、コロン(“:”)で区切ることにより、行の長さの制限までいくつでも書くことができます。
A = 1 : B = 1
当然ですが、GOTO や GOSUB で行の途中に飛ぶことはできません。これがもっとも役に立つのは IF 文の THEN より後ろなんですが、ELSE があるときに、どこまでが条件が成立したときに実行されるのかわかりにくくなることもあるので気をつけるところです。
さて、今回はこのくらいにしておきます。BASIC にはとても多くの処理系があって、それぞれの文法が実に微妙に異なるのですが、このあたりはだいたい共通です。ですが細かな違いはいろいろあって、異なる BASIC にプログラムを移植する時には苦労の連続です。
次の機会に、基本的な入出力を説明してみますね。そろそろ簡単なプログラムなら組めるんじゃないかと思います。
(おまけ)
BASIC - 昔の BASIC をわかりやすく説明してくれています。
ヘッダ画像は、いらすとや さんよりhttps://www.irasutoya.com/2013/08/blog-post_3908.html
#BASIC #レトロPC #GOTO #IF #FOR #NEXT #GOSUB #RETURN