はじめに
BASICプログラミングでは、プログラム内で使用する固定的なデータを扱う方法がいくつかあります。その中でも、DATA
文とREAD
文の組み合わせは、プログラムのソースコード内に直接データを埋め込み、それを順番に読み出すための古典的で便利な方法です。 📝
例えば、ゲームのキャラクターパラメータ、設定値、短いメッセージリストなど、外部ファイルに保存するほどではないけれど、プログラム内でまとめて管理したいデータがある場合に役立ちます。
さらに、RESTORE
文を使うことで、これらのデータを繰り返し読み出すことも可能になります。
このセクションでは、DATA
、READ
、RESTORE
の基本的な使い方を学びましょう!
DATA文:データを定義する
DATA
文は、READ
文によって読み込まれる定数データ(数値や文字列)のリストをプログラム内に定義します。
構文:
DATA 定数1 [, 定数2, ...]
DATA
キーワードの後に、カンマ(,)区切りで読み込みたいデータを記述します。- データには、数値(例:
10
,3.14
)や文字列(例:"Hello"
,"BASIC"
)を指定できます。 - 文字列データにカンマ(,)、コロン(:)、先頭や末尾のスペースが含まれる場合は、通常ダブルクォーテーション(“”)で囲みます (BASICの方言によっては常に必要)。
DATA
文はプログラム内のどこにでも記述できますが、実行される文ではありません。プログラム実行時、DATA
文の行は基本的にスキップされます。- 複数の
DATA
文がある場合、それらはプログラムに登場する順序(通常は行番号順)に従って、一つの連続したデータリストとして扱われます。 DATA
文には定数のみを記述でき、変数や式を記述することはできません(例:DATA A + B
は不可)。
DATA
文は、プログラムの可読性を高めるために、関連するコードの近くや、プログラムの最後などにまとめて記述することが一般的です。例:
10 DATA 10, 20, 30
20 DATA "Apple", "Banana", "Cherry"
30 DATA 1.5, "Mixed Data", 99
上記の例では、10, 20, 30, "Apple", "Banana", "Cherry", 1.5, "Mixed Data", 99
という順番のデータリストが作成されます。
READ文:データを読み込む
READ
文は、DATA
文で定義されたデータを順番に読み込み、指定された変数に代入します。
構文:
READ 変数1 [, 変数2, ...]
READ
キーワードの後に、カンマ(,)区切りでデータを代入したい変数を記述します。- プログラムが
READ
文を実行すると、DATA
リスト内の「次に読み込むべきデータ」を変数に代入します。 - BASICシステムは内部的に「データポインタ」を持っており、どのデータまで読み込んだかを記憶しています。
READ
文に複数の変数が指定されている場合、DATA
リストから順番に値が読み込まれ、それぞれの変数に代入されます。READ
文で指定した変数の型(数値型、文字列型など)と、DATA
文のデータの型が一致している必要があります。一致しない場合、エラー(例:Type mismatch
)が発生することがあります。- すべての
DATA
を読み込んだ後に、さらにREAD
文を実行しようとすると、エラー(例:Out of DATA
)が発生します。
例:
10 DATA 100, "Taro", 25.5
20 DIM NAME$ AS STRING ' 文字列変数の宣言(方言による)
30 READ ID%, NAME$, SCORE ' ID%(整数), NAME$(文字列), SCORE(実数) に読み込む
40 PRINT "ID:"; ID%
50 PRINT "Name:"; NAME$
60 PRINT "Score:"; SCORE
実行結果:
ID: 100
Name: Taro
Score: 25.5
この例では、DATA
文の100
がID%
に、"Taro"
がNAME$
に、25.5
がSCORE
にそれぞれ代入されます。
RESTORE文:読み込み位置をリセットする
RESTORE
文は、READ
文が次にデータを読み込む位置(データポインタ)をリセットします。これにより、DATA
文のデータを最初から、または指定した位置から再度読み込むことができます。🔄
構文:
RESTORE [行番号 または ラベル]
RESTORE
のみを記述した場合、データポインタはプログラム中の最初のDATA
文の先頭に戻ります。RESTORE
の後に行番号やラベル(ラベルが使えるBASIC方言の場合)を指定すると、データポインタはその指定された行(またはラベルのある行)以降で最初に出現するDATA
文の先頭に移動します。
例:
10 DATA 1, 2, 3
20 DATA 10, 20, 30
30 PRINT "First Read:"
40 FOR I = 1 TO 3
50 READ A
60 PRINT A;
70 NEXT I
80 PRINT
90 PRINT "Read After RESTORE:"
100 RESTORE ' データポインタを先頭(DATA 1, 2, 3)に戻す
110 FOR I = 1 TO 3
120 READ B
130 PRINT B;
140 NEXT I
150 PRINT
160 PRINT "Read After RESTORE 20:"
170 RESTORE 20 ' データポインタを行番号20(DATA 10, 20, 30)に移動
180 FOR I = 1 TO 3
190 READ C
200 PRINT C;
210 NEXT I
220 PRINT
実行結果:
First Read:
1 2 3
Read After RESTORE:
1 2 3
Read After RESTORE 20:
10 20 30
この例では、最初にDATA
文の1, 2, 3
を読み込みます。
次にRESTORE
でポインタをリセットし、再度1, 2, 3
を読み込みます。
最後にRESTORE 20
で行番号20のDATA
文にポインタを移動させ、10, 20, 30
を読み込んでいます。
応用例:配列へのデータ読み込み
DATA
文とREAD
文は、特に配列の初期化に便利です。
10 DIM SCORES(4) ' 0から4までの5要素の配列を宣言
20 DATA 85, 92, 78, 99, 65 ' 5つのスコアデータ
30 ' DATA文から配列にデータを読み込む
40 FOR I = 0 TO 4
50 READ SCORES(I)
60 NEXT I
70 ' 読み込んだデータを表示
80 PRINT "Scores:"
90 FOR I = 0 TO 4
100 PRINT "Student"; I; ":"; SCORES(I)
110 NEXT I
実行結果:
Scores:
Student 0 : 85
Student 1 : 92
Student 2 : 78
Student 3 : 99
Student 4 : 65
このように、FOR...NEXT
ループと組み合わせることで、DATA
文の値を効率的に配列に格納できます。
まとめ
- DATA: プログラム内に読み込み用の定数データ(数値、文字列)を定義します。
- READ:
DATA
文で定義されたデータを順番に読み込み、変数に代入します。 - RESTORE:
READ
文の読み込み開始位置を、DATA
リストの先頭または指定した行/ラベルに戻します。 - これらを組み合わせることで、プログラム内にデータを埋め込み、効率的に利用できます。特に配列の初期化などに便利です。
READ
するデータの型と変数の型を一致させる必要があります。DATA
をすべて読み込んだ後にREAD
するとエラーになります。
DATA
、READ
、RESTORE
を使いこなして、プログラム内でデータをスマートに扱いましょう! 🎉
コメント