OriosのActiveBasic講座(1-1):入出力

4.変数

【目標】プログラミングで必須の「変数」が使えるようになりましょう。

今回はタイトルを聞いただけでは何のことやらさっぱり分からないと思います。 この「変数」というのは計算した数値などを保存させるという便利なもので、「変数あってのプログラミング」と言っても過言ではないというものです。 では今回も難しいことがあるかと思いますが頑張っていきましょう! まずは下のプログラムを実行させてみましょう。

'lesson1-1-4
#console
Dim a As Long
Dim b As Long
Dim str As String
a = 10
b = a * 2
Print a; b
a = a * b
Print a
str = "Active"
Print str
str = str + "Basic"
Print str
Sleep(3000)
End

実行すると次のようなウィンドウが表示されます。

C:\ActiveBasicCourse\lesson1-1-4.abp
10 20
200
Active
ActiveBasic

では今回のプログラムの説明に入ります。 今回はプログラムが少し長くなりましたが、「変数あってのプログラミング」というくらい大事な部分なのです。 今回も頑張って読んでみてください。

-*-*-*-*-説明-*-*-*-*-
【使い方】
Dim 変数名  As  
【意味】
変数名 を で使うことを宣言します。
【解説】
変数の宣言
(i) 変数
前回までのプログラムでは文字や計算式を直接書いて表示させていましたが、あなたはその計算式の値や文字列を表示させるだけでなく保存したくなりませんでしたか? そんなときに役立つのがこの「変数」です。 この「変数」というのは、どこのプログラミング講座でも書かれていますが、数値や文字を保存する「箱」のような物です。 例えば「1 + 1」の結果をこの「箱」の中に入れて、後でこの箱の中身を表示させたり、この箱の中身を使ってさらに計算をしたりすることができます。
(ii) 変数名
「変数名」とはその名前の通り「変数の名前」です。 例えば変数、つまり値を保存する「箱」を何個も使いたいときに、それぞれに名前がないとどれがどの変数、つまり「箱」か区別がつかなくなりますよね。 そこでそれぞれの変数に名前をつけてやるわけです。 だからといってどんな名前でも付けれるかというとそういうわけではありません。 この名前の付け方にはルールがあります。 下に書いたのがそのルールです。
  • 使える文字はアルファベット・数字・アンダーバー(_)だけです。(漢字やひらがな・カタカナなどはダメ)
  • 変数名の最初に数字は使えません。([例] a0, × 0a)
  • 命令語と同じ名前は大文字・小文字関係なく使えません。([例] × Dim, pRiNt, etc ; End_e [含まれるのはOK])
(iii) 型
一口に箱と言っても、大きい箱・小さい箱・びっくり箱(?)……といろいろ種類があるように、変数にも文字用の変数・大きい数字用の変数・整数用の変数……というふうにいろいろ種類があります。 この種類のことをと言います。 そしてこの型によってその変数に保存できるものが決まってきます。 ActiveBasicで使う主な型は次の通りです。
型名名前扱えるもの
Long符号付32ビット整数型-2147483648 〜 2147483647 の範囲内の整数
Integer符号付16ビット整数型-32768 〜 32767 の範囲内の整数
Single単精度浮動小数点型 (32ビット)3.4×10-38 〜 3.4×1038の範囲の数値 (7桁の指数の形([例] 1.234567×107)で保存されます。)
Double倍精度浮動小数点型 (64ビット)1.7×10-308 〜 1.7×10308の範囲の数値 (15桁の指数の形([例] 1.23456789012345×1015)で保存されます。)
String文字列型文字列(プログラミングでは文字のデータを「文字列」と言います。)
(iv) 変数の宣言
上の(i)〜(iii)で変数について説明しましたが、では「変数の宣言」とは何なのでしょうか? それは「変数名 という変数を で使う」ことをあらかじめコンピューターに宣言して、変数、つまり箱を準備してもらうということなのです。 「そんなこと何でわざわざ……」と思うかもしれません。 確かにプログラミングする側にはそんなこと面倒くさいかもしれません。 しかしコンピューターにとっては変数の宣言がないと非常に困るのです。 例えば宣言せずにいきなり「aaa」という変数が出てきたとしましょう。 するとコンピューター側は「そんな変数聞いてないぞ」とその場で「aaa」という箱を作ります。 「そっちの方が便利じゃん。」と思うかも知れませんが、そうはいきません。 いちいち新しい変数の記述があるたびに箱を作ったりしていると、だんだんコンピューターの安定性がなくなり、最後にはフリーズしてしまいます。 またその変数がどんな型にすればいいのかコンピュータは迷ってしまいます (注:たいていの場合、勝手にDouble型にします)。 なのであらかじめ使う変数を宣言しておき、いきなり未知の変数が現れないようにしているのです。 もし宣言していない変数を使おうとすると、コンパイルのときにエラーが出てしまいます。
※1 ちなみに昔の「N88-BASIC」や「ActiveBasic 2.x系」ではこのような宣言は必要ありませんでした。 しかし変数の宣言をしていないと宣言した場合と比べてプログラムの動作が遅いということが実際に起っていました。 確かめてみたい方は次のプログラムをダウンロードして実際に確かめてみてください。 [ 変数の宣言の有無によって実行速度がどう変わるかを確かめるプログラム (80,813Bytes) ]
※2 変数は宣言した直後の値は、数字を保存する変数の場合は「0」、文字列を保存する変数には何も入ってません。 ただ宣言したときに何が起こるか分からないので、もし不安な場合は宣言した変数に「0」または「""」を代入(次の項目を参照)してください。
【使い方】
変数名  = 数値 
【意味】
【解説】
数値の代入
( ) 変数はさっきデータを保存する箱と言いました。 では実際にどのように保存するのか(これを代入といいます。)というと、上のプログラムのように「=」の左側に値を代入させたい変数名、右側に代入したい値を書きます。 これを見て変に思うかもしれませんが、この「=」は数学で使う「左辺は右辺と等しい」という意味では決してありません。 あくまでプログラミング独特の表記です。 この表記はプログラミングでは基本中の基本で今後大量に出てくるので慣れてください (※「『変数名 と数値 は等しい』を成り立たせる」と考えると分かりやすいかもしれません)。
【使い方】
変数名  = 計算式 
【意味】
変数 に計算式 の計算結果を代入します。
【解説】
(1) 計算式の結果の代入
( ) 変数には[2]で説明した数値だけではなく計算式の計算結果も代入できます。 ただし、計算式を書いていいのは右辺だけで、左辺では使えません
[例] ○: a = 1 + 1 (「a」には「1 + 1」の計算結果である「2」が代入されます。)
×: a + 1 = 43 (左辺には計算式は使えません。決して「a + 1 = 43」の方程式を解いてくれるなんてことはありません。)
※ 変数の値はプログラム中で何回でも変更できます。 そしてその変数の値は別のところで別の値が代入されるまで変わりません。
(2) 変数を含む計算(1)
( ) 計算式中に変数が含まれている場合は、その変数はそのときのその変数の値の代わりをします。 具体的に説明すると、[1]で変数を「数値や文字を保存する箱」と言いましたが、その「箱」に保存された値や文字のことを変数の値と言います。 そして、計算式中に変数が含まれている場合は、その変数の部分は、計算の際にその計算をしているときの変数の値に置き換えられて計算されます。 例えば「a」という変数に「3」という値が入っている場合、「a + 4」は「a」の部分が変数「a」の値である「3」に置き換わって「3 + 4」として計算されて「7」となります。 上のプログラムの「b = a * 2」の場合は、その前の行で「a = 10」と代入されているので、「a」の部分が「10」に置き換わって、「b」には「10 * 2」の計算結果である「20」が代入されます。
※ 数値の計算式の中にString型(文字列型)の変数を入れることはできません。 また逆に[6][7]で説明する文字列の代入のときに数値の計算式を使うこともできません。
【使い方】
Print 表示させるもの1 ;表示させるもの2 ; ……
【備考】
「Print 」の後に表示させるもの を必要な分だけ「;」で区切りながら書いていきます。
【意味】
表示させるもの1 、表示させるもの2 、……を改行せず、横に並べて表示していきます。
【解説】
データの並列
( ) データを改行せずに並べて表示するときはAB講座1-2 [2]でやったとおり、「Print 表示させるもの ;」を2行以上に渡って書く方法を既に学習していますが、この場合2行以上に渡って書くためにプログラムが長くなり、さらに前のデータと次のデータとの間隔が空きません。 そこでデータを並べて表示するときには、最後に「;」をつける方法のほかに、データを「;」で区切りながら並べて各方法もあります。 これを使うと1行で書けますし、データとデータの間に半角スペースが1文字分自動的に入ります。
※ この場合の「;」はデータとデータを区切るときに使い、データの最後に使う必要はありません。 データの最後に「Print a; b; c;」というふうにつけた場合、AB講座1-2 [2]でやった改行・スペースなしに続けて表示させる構文として扱われます。
【解説】
変数を含む計算(2)
( ) 今回は式が「a = a * b」となっています。 数学的にはこの式はbが1でない限りありえません。 しかし、プログラミングでは違います。 この式のように変数の左辺と右辺に同じ文字が使われていたとしても、意味は先に右辺を計算して、その結果を左辺に代入です。 この例の場合、まず右辺を計算をし、つまり「a」が「10」、「b」が「20」なので「a * b」より「200」になります。 そしてこの計算結果を改めて「a」に代入して「a」は「200」になります。 他の例では「a」の値を1増やしたいときは「a = a + 1」と表記できます。 この場合「a + 1」を計算し、その結果すなわち「a」が1増えた値を「a」に改めて代入します。
【使い方】
変数名  = "文字列 "
【意味】
変数名 に文字列 を代入します。
【解説】
文字列の代入
( ) AB講座1-2 [1]で、「文字は『"』で囲む!」と書きましたが、代入するときでも同様に、文字列は「"」を使って囲みます。 ただし文字列を保存する変数を「"」で囲んではいけません。
[例] ○ str = "Active" ×"str" = "Active" (←この場合「"str"」は"str"という文字列として扱われるため、代入になりません。)
【使い方】
文字列1  + 文字列2 
【意味】
文字列1 と文字列2 を連結します。
【解説】
文字列の連結
( ) 文字列同士をくっつけるときには「+」という演算子を使います。 この「+」は数字の足し算のときに使う記号と同じですが、文字列同士で「+」を使うと文字列同士を連結します。 またこの文字列の連結は他の数字のときの計算のときと同様、文字列 の部分に変数を用いることもできます。 ただし、普通の文字列の場合は「"」で囲みますが、文字列変数のときは「"」で囲みません。 また、数字と文字列を「+」で結ぼうとするとエラーが出ます。 あくまで数字の計算のときは数字同士、文字列の結合のときは文字列同士です。

< For Recollection ... >

覚えにくい単語を少しでも覚えやすくするための新コーナーです。(2007.06.13)

  • Dim

    「Dim」は「Dimension」(次元)の略です。 ActiveBasicは序章の2.なぜActiveBasicかでも書いたとおり、N88-BASICを意識して作られています。 このN88-BASICでは、ActiveBasicと違い変数の宣言をしなくても変数が使えました。 しかし、第四章で扱う配列を使うときだけは、変数を宣言することが奨励されていました。 このときに使われたのが「DIM」です。

    配列というのは、数学における添え字(a1, a2, ……)と同じ感覚で、「1番目の『a』」「2番目の『a』」……のように複数の変数に番号をつけて一つの名前にまとめ、使うときにはその名前と番号を指定するタイプの変数です。 そして、この番号の付け方には、「2の5の4番」のように、複数の数字を使う方法もあります。 この数字の数(この場合は3つ)のことを 配列の「次元」といいます。

以上が変数についての基本的な説明です。 一気にいろいろなことを書いてしましたが、変数はプログラミングの基礎です、何度も言いますが。 変数の内容は、慣れていない人には理解不能な部分があると思います。 しかしこれを覚えていないと、これから先は絶対プログラミングはできません。 なので「変数なんか嫌だ。早くソフトを作りたい。」と思う気持ちを我慢して、しっかりと変数を理解してください。 柔道でも勝ち方より負け方(=受身)を先に教えるのと同じです。 では本当に理解できたかを確かめる「やってみよう」です。

-*-*-*-*- -*-*-*-*-
(1) あらかじめLong型変数「a」「b」に、それぞれ「20」「10」を代入しておき、その2つの変数を加減乗除した結果を、Long型変数「c」「d」「e」「f」にそれぞれ代入して、それらを並べて表示させるプログラムをみましょう。
(2) String型変数「str」に"*"を1個ずつ連結していき、その度に「str」の内容を表示させていくプログラムを作ってみましょう。 ただし"*"は3回増やすだけで構いません。
【表示結果】
*
**
***

ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

前に戻る - 次に進む

ホーム > OriosのActiveBasic講座(トップページ) >