「BASIC」の版間の差分

<syntaxhighlight lang=basic>
(→‎BASICの分類: /C言語などの他のプログラミング言語の多くにも影響を与えており、/d)
タグ: 2017年版ソースエディター
(<syntaxhighlight lang=basic>)
タグ: 2017年版ソースエディター
BASICには大きくわけて、
* [[w:MS-DOS|MS-DOS]](エムエス ドス)時代までの「古いBASIC」 ([[w:N88-BASIC|N88-BASIC]]や[[w:F-BASIC|F-BASIC]]、[[w:MSX-BASIC|MSX-BASIC]]などを想定)
*「JIS規格BASIC」(JIS X3003-1993)や[[w:QuickBASIC|QuickBASIC]](クイック ベーシック)以降の、「新しいBASIC」
* [[w:Microsoft Visual Basic|マイクロソフト社 Visual Basic]](ビジュアル ベーシック)以降の、[[w:GUI|GUI]](グイ)に特化したBASIC
 
の3種類があります。ここでは最初の2種類のBASICを対象にしますが、ほとんどの構文については3つ目の種類のBASICにも「新しいBASIC」と同じことが通用します。違いについてはその都度、注記します。
 
Microsoft Quick BASIC(MS-DOS時代) 互換系の open source 等が存在していて、それらを使うという手もあります。
* FreeBASIC
 
* QB64
・FreeBASIC
* その他
 
・QB64
 
・その他
 
特にQB64はエミュレート機能を備えており旧来的な方法によるプログラミングが一部可能となっています。
 
 
簡単なプログラムの例
<syntaxhighlight lang=basic>
<pre>
5 clsCLS
10 PRINT "3+5=";
20 PRINT 3+5
30 END
</syntaxhighlight>
</pre>
 
各行の最初についている数字が行番号です。10からはじめて10ずつ増やしていくのが一般的です。こうすれば、後から簡単に行を挿入することができます(ただし9行まで)。PRINT は前節で説明した通り画面に文字を出力する命令です。最後の END はプログラムの終了を表す命令で、省略可能なBASICも多いですが、そうでなければ必ず入れるようにします。
なお、古いBASICでは「:」を用いると次のようにも書けますが、現在では推奨されません。
 
<syntaxhighlight lang=basic>
<pre>
5 clsCLS
10 PRINT "3+5=";:PRINT 3+5
20 END
</syntaxhighlight>
</pre>
 
現在、一部の(再現)BASICでは、
 
<syntaxhighlight lang=basic>
<pre>
5 clsCLS
10 PRINT "3+5=";3+5
20 END
</syntaxhighlight>
</pre>
 
のように記述することができます。
なお、ENDはプログラムの終了を表す命令でしたので、たとえば、
 
<syntaxhighlight lang=basic>
<pre>
5 END
10 PRINT "3+5=";3+5
20 END
</syntaxhighlight>
</pre>
のようなプログラムだと、「3+5=」を表示する前に、いきなり終了します。
 
=== 行番号が順番どおりでない場合 ===
 
<syntaxhighlight lang=basic>
<pre>
20 PRINT("aaa20")
10 PRINT ("bbb10")
</syntaxhighlight>
</pre>
 
のように、行番号が順番どおりではない場合、どの行を優先して実行するのでしょうか?
 
現代のGUI対応のBASICでは、行番号のないものが多いのですが、その理由のひとつも、おそらく、このような、行番号と順序のちがう場合の混乱を防ぐためなど、それなりの理由があるのでしょう。
 
 
さて、たいていの古いBASICの場合、行番号の小さい順から先に実行すると思います(いくつかの再現BASICソフトで確認)。この場合、特にエラーメッセージなどは、出されません。
おそらく、古いBASICでは、ソフトウェアの内部では、プログラムの実行のさいしょに(つまりRUN命令の直後に)、まず行番号にもとづいて並べ替えを行って、
 
<syntaxhighlight lang=basic>
<pre>
10 PRINT ("bbb10")
20 PRINT("aaa20")
</syntaxhighlight>
</pre>
 
のように並べ替えてから、それからやっと、上から順に実行をしているのでしょう。
新しいBASICでは、プログラムを編集するためのエディタを持っており、これを入力に使います。エディタの概要や使い方自体は省略します。また、次のように「行番号を省略」できます。
 
<syntaxhighlight lang=basic>
<pre>
PRINT "3+5=";
PRINT 3+5
END
</syntaxhighlight>
</pre>
 
プログラムの実行は、RUNではなく、エディタのメニューから「実行」を選択します。
== 以下は基本的に古い形式で説明します ==
* ここで 古い形式を N-BASIC, MSX-BASIC とします。それ以降のBASICで働くように考慮します。
 
* 説明はストレートでわかりやすく、具体例を多く入れます。
 
* 出来るだけ専門用語を使いません。もし使うときは説明を入れます。
 
== 最初に ==
* BASICのプログラムは行単位で実行されます。
 
* 行の上から下に向かって実行されます(分岐などもあります)。
 
* STOP命令, END命令で実行が終了します。
 
* 空白にも意味がありますので注意しましょう。
 
 
※ 他のプログラム言語でも、似たような文法の言語は、多くあります。他のプログラム言語によくあるのは、主に、
注釈(ちゅうしゃく)をつけるには'''REM'''を使います。「レム」と読みます。注釈とは「何も実行しない」という命令で、プログラムの説明を書いたり、[[w:デバッグ|デバッグ]](エラーの原因をさがす作業のこと)などで一時的に命令を実行させないようにするとき、などに使います。
 
<syntaxhighlight lang=basic>
<pre>
10 REM PRINT "1"
20 PRINT "2"
30 END
</syntaxhighlight>
</pre>
 
このプログラムを実行すると、10行目は何も実行せず、20行目が実行されて、画面に「2」とだけ表示します。
画面に表示させるには PRINT文を使います。「プリント」と読みます。
 
<syntaxhighlight lang=basic>
<pre>
10 PRINT "これが表示されます。"
20 PRINT 123
30 END
</syntaxhighlight>
</pre>
 
PRINTの後に続くものを画面に表示します。文字列、数値、変数など
 
 
<syntaxhighlight lang=basic>
<pre>
5 REM これは 数値をキー入力して、変数Aに代入、そして変数Aを表示する。
10 INPUT A
20 PRINT A
30 END
</syntaxhighlight>
</pre>
 
10 INPUT A では、数値変数Aに キーボードから入力した数値を代入します。
このような書き方も出来ます。
 
<syntaxhighlight lang=basic>
<pre>
10 INPUT "数値を入力して下さい ",A
20 PRINT A
30 END
</syntaxhighlight>
</pre>
 
入力を促す文字列を表示してから、入力に入ります。
'''変数'''は、数値や文字などのデータを入れておく箱のようなものです。
 
<syntaxhighlight lang=basic>
<pre>
10 A=12
20 B=3
60 PRINT A/B
70 END
</syntaxhighlight>
</pre>
 
このプログラムは、変数 A に 12、変数 B に 3 を代入し、足し算・引き算・掛け算・割り算の結果を表示する物です(順に、15 9 36 4 と表示されます)。
 
 
<syntaxhighlight lang=basic>
<pre>
10 A=12
20 A=A+1
30 PRINT A
40 END
</syntaxhighlight>
</pre>
 
を実行すると、計算結果(12+1)の「13」が表示されるでしょう。
将来的に、LET文のある他のプログラミング言語の学習のことを考えて、LET文をつかって上記のプログラムを書いてみましょう。
 
<syntaxhighlight lang=basic>
<pre>
10 LET A=12
20 LET B=3
60 PRINT A/B
70 END
</syntaxhighlight>
</pre>
 
== 入力命令 ==
 
(プログラム例)
<syntaxhighlight lang=basic>
<pre>
10 INPUT "数値を入力してください" ;A
20 PRINT "入力された数値は"
40 PRINT "です。"
50 END
</syntaxhighlight>
</pre>
 
または
 
<syntaxhighlight lang=basic>
<pre>
5 PRINT "数値を入力してください"
10 INPUT A
20 PRINT "入力された数値は"
40 PRINT "です。"
50 END
</syntaxhighlight>
</pre>
 
 
まったく別のプログラムでも、同じ変数名「A」や「B」を、まったく別の内容で使うこともありますので、必要に応じて NEW 命令を使いましょう。
 
<syntaxhighlight lang=basic>
<pre>
10 NEW
20 LET A=7
30 PRINT A+9
40 END
</syntaxhighlight>
</pre>
 
と書いて実行すれば、このプログラムの実行前にどんなプログラムで変数「A」を用いていようが、それを初期化できます。
 
(あまり、よくないプログラム)
<syntaxhighlight lang=basic>
<pre>
20 LET A=7
25 NEW
30 PRINT A+9
40 END
</syntaxhighlight>
</pre>
 
このプログラムなら、PRINT命令で「9」が表示されたりします。なぜならAが初期化されてしまい、Aに0が代入されているからです。
ほかのプログラム言語でも、条件分岐命令のことを普通は「IF文」と言います。なお、THENは「ゼン」と読み、ELSEは「エルス」と読みます。
 
<syntaxhighlight lang=basic>
<pre>
10 A=0
20 B=3
30 '''IF''' A > B '''THEN''' PRINT "A is bigger than B" '''ELSE''' PRINT "B is bigger than A"
</syntaxhighlight>
</pre>
 
ここで使っているA > Bの '''>''' は'''比較演算子'''(ひかく えんざんし)といい、数値の比較に使います。
条件分岐ではない、強制の分岐には'''GOTO'''命令を使います。「GOTO」は「ゴー トゥー」と読みます。GOTOの後に行番号を入れると、対応する行の命令を実行します。
 
<syntaxhighlight lang=basic>
<pre>
10 GOTO 30
20 PRINT "1"
30 PRINT "2"
40 END
</syntaxhighlight>
</pre>
 
このプログラムを実行すると20行目がスキップされ、30行目が実行されて、画面に「2」とだけ表示します。
 
<syntaxhighlight lang=basic>
<pre>
10 GOTO 40
20 PRINT "1"
50 GOTO 20
60 END
</syntaxhighlight>
</pre>
 
このプログラムを実行すると、画面に「2」「1」と表示します。が、このようにGOTOの飛び先が入り組んだプログラムは「スパゲティ・プログラム」と呼ばれて、「他の人が見てもプログラムの構造を一目では把握しづらい」ために、通常のプログラムでは 禁じ手(きんじて) とされています。
 
<syntaxhighlight lang=basic>
<pre>
10 PRINT "1"
20 PRINT "2"
30 GOTO 10
40 END
</syntaxhighlight>
</pre>
 
このプログラムを実行すると、画面に「1」「2」を表示し続けます。このように「終了せずに、実行し続ける」プログラムを「無限ループ」と呼びます。表示を止めるには、古いBASICではAUTO命令を止めるときと同様に「BREAK」などのキーを押してください。新しいBASICではメニューから「停止」を選択します(Visual Basicなどでは無限ループを書くとそのまま問答無用で応答不能になってしまうものもありますので、アプリケーションを強制終了させるか、CTRL+ALT+DELするなどしてOSから強制終了させてください)。
FORの直後の変数(上記の場合はN)と、NEXTの直後の変数は、同じ変数でなければなりません。
 
<syntaxhighlight lang=basic>
<pre>
N= 1 J= 1
N= 2 J= 3
N= 4 J= 10
N= 5 J= 15
</syntaxhighlight>
</pre>
 
FOR 文の構文は以下の様になります。
DATA文、READ文、RESTORE文 です。
 
<syntaxhighlight lang=basic>
<pre>
20 READ A
30 PRINT A
40 DATA 1,2,3
</syntaxhighlight>
</pre>
 
20行でDATA文から1個読み込んで変数Aに代入します。30行で表示します、この例では「1」が表示されます。もし次に読み込んだなら「2」が読み込まれます。
 
 
<syntaxhighlight lang=basic>
<pre>
10 RESTORE 50
20 READ A
40 DATA 1,2,3
50 DATA 4,5,6
</syntaxhighlight>
</pre>
 
10行のRESTOREでDATA文の読み込み先を指定します、ここでは50行から読み込みます。20行で読んで、30行で表示。この例では「4」が表示されます。普通は FOR NEXT文などを使って 連続して読み込みます。
3,595

回編集