文系でもわかるBASIC入門
7.変数と代入について
どんなプログラム言語でも変数と代入が基本中の基本です。
聞き慣れない言葉ですがプログラミングの世界では頻繁に出てきます。
変数と代入の概要
変数(へんすう)とは、数値や文字列を入れるための入れ物のことです。
代入(だいにゅう)とは、変数の中身を入れ替える作業を指します。
上図のように、文字列を代入することもできます。
変数へ代入してみよう
いくつかの例を見せます。試してみましょう。
試す前にNEW命令を使って前のプログラムを消してください。
また、画面をクリアしたい時はCLS命令を使います。
行番号10で、変数Aに5を代入しています。
10 a=5
この書き方に違和感を感じると思います。
それは右の値を左の変数に入れるという仕組みだからです。
プログラム言語では一般的に「右辺から左辺へ」のルールが使われています。
慣れてください。
行番号20で、変数Bに3を代入しています。
行番号30、40で変数AとBを出力しているのでRUNによる実行結果は
5
3
になります。
次の例です。
1つの変数が、左辺と右辺どちらにもある例です。
行番号20を見てください。行番号10で変数Aには5が代入されているので
20 a=a+7 は
20 a=5+7 ということになります。
結果はちゃんと 12 になっています。
次です。
変数から別の変数へ代入する例です。
行番号20と30では、代入された値が使われます。なので次のようになります。
20 B=5*5
30 C=5+25
実行結果も正しく表示されています。
結局、右の値(計算結果)を左の変数に入れるという仕組みなので、 どのように変数が使われていてもこのルールをただ守るだけです。
次はいろいろと混ざった話です。
行番号30に注目してください。
ダブルクォーテーション(")で囲われた所は文字列として扱われます。
その後ろの(A+B)は変数同士の足し算として扱われます。
よって、実行結果は
a+b= 15
となります。
ここで少し「あれ?」と思った人は鋭いですね。
プログラムを小文字で入力してもLISTを実行すると大文字で表示されます。
しかし、行番号30のPRINTの後の文字列 ”a+b=” は大文字に変換されてません。
これは文字列は値として扱うため、コンピュータは勝手に変換しないのです。
次です。
ここでは文字列の変数を使っています。
行番号10を見てください。
変数 a の後に$(ダラー) が付いてます。
この$マークを付けると文字列変数になります。
文字列変数は、文字列のみ代入できます。
それから行番号20にある+(プラス)は、足し算ではなく文字列をつなげる役目をします。
文字列または文字列変数の隣にある+は足し算では無いので注意しましょう。
つぎは文字列変数の代入エラーの例です。
まず実行結果を見て下さい。
Type mismatch in 30
となっています。
これは「行番号30で、異なる型同士の処理をしようとした」というエラーです。
文字列変数 B$ に数値を入れようとしてます。
30 B$=60
文字列変数には文字列しか代入できません。
ダブルクォーテーション(")で囲うことで代入できます。
エラー例をもう一つ。
行番号30でエラーになりました。
30 C$=A$+B
文字列変数 A$ と変数 B(数値変数)は異なる型のため、いっしょに処理できません。
このような場合はすべて文字列タイプで統一します。
しかし、数値タイプを使いたい時もあります。
その時は文字列変換STR$(数値または変数)を使います。
30 C$=A$+STR$(B)
変数 B の内容は文字列へ変換されて A$とつながります。
変数の取り扱いに注意しましょう
BASICでは変数を手軽に使うことができます。
他の言語では「この変数は整数のみを扱います」などのように使う用途を
前もって宣言する必要があったりします。
ただ、手軽さがある故にデメリットもあるのです。
りんごの数は3と正しく表示されているのに、
バナナの数は0と表示されてます。
行番号20で5を代入しているので5と表示されるはずですが…
行番号40を見て下さい。
バナナのスペルを間違えてbanonoになっています。
つまり、bananaには5を代入しましたがbanonoには何も入れてないのです。
だから0と表示されてしまいました。
この講座のはじめの頃、print hello を実行したことがありました。
実行結果は0でした。
この理由をやっと説明できます。
hello は何も代入されていない変数として扱われたため、ですね。
話を戻します。
banono を banana に変更して実行してみます。
ちゃんと代入された結果が表示されました。
BASIC では変数を宣言せずにいつでも使えます。
ですから、スペルミスがあってもエラーになりません。
変数の名前を間違えることで、プログラムが正常に動かず
しかもどこを間違えているのかなかなか分からないことが発生し易いです。
エラーではないけど正常に動かないという場合には
変数の名前を間違えてないかチェックしてみて下さい。