コンピュータリテラシー演習のページへ
Rubyによるはじめてのプログラミング

変数を使う

大多数のプログラミング言語には「変数」というものがあります。 変数を使わないプログラムはない、と言えるほど変数は日常的に使われます。

変数というのは、何かの値を入れる箱のようなもので、 1個1個に名前を付けて使います。 この名前を変数名といいます。

※ Rubyの場合、「変数は箱のようなものである」という表現が正しくない場合があります。 しかし、ここでは説明をしやすくするため、あえて厳密さを欠いています。
print 100+50, "\n"

前で取り上げたこのプログラムを変数を使うように書き換えましょう。

var1.rb : 変数を使ったプログラム
a = 100+50
print a, "\n"

このプログラムは、100+50の計算結果をaという名前の変数に代入 しています。 つまり、a という名前の箱に 150 という数値を入れたと考えれば良いでしょう。 そして次の行で変数aに入っている値(この場合150)をprint文で表示しています。

次のプログラムを見てください。

var2.rb : 変数を使ったプログラム
a = 100
a = a + 50
print a, "\n"

このプログラムも上の2つのプログラムと同じ結果をもたらします。 2行目のa = a + 50に注目してください。 数学の式で a = a + 50 というのはおかしな式です。

実は =の意味が数学の式とは全く違うのです。 数学の = は、「左辺と右辺が等しい」ということを意味しますが、 Rubyでは「右辺の値を左辺(変数)に代入する」という意味になります。 ピンと来ない人は、a = a + 50 を a ← a + 50 に置きかえて考えてみましょう。

[補足] 実際に流れ図やアルゴリズムなど、プログラムを概念的に示す場合には a ← a + 50 という書き方をします。

以下のようにprint文を付け足すと、a に50が足されていることがより分かるでしょう。

a = 100
print a, "\n"
a = a + 50
print a, "\n"
[豆知識]

C, Perl, Java, Basic などでも代入は = を使います。 ところがPascalという言語では = を数学と同じ意味(等式:左辺と右辺が等しい)で使います。 Pascalでは数学の表現を重視しているためです。 ちなみにPascalの場合、代入には := を使います。 さらにSmalltalkなどの言語では、代入を表現するために、わざわざ ← の文字(日本語文字コードの←ではありません)を用意しています。

なぜ Ruby などで代入が = かというと、 ほとんどのプログラムでは等式よりも代入を書く機会のほうがはるかに多いので、 短く書ける = を代入としているのです。

書くときの効率を重視したRuby や C と、 由緒正しいPascal。 RubyやCでは等式を == と書くべきところを = と書いてしまうミスを誰でも一度は経験すると思います。代りに Pascal では、代入を書くたびに1文字余分に打込まないといけません。 みなさんはどちらが良いと思いますか?

いろんな言語の代入の書き方をまとめました。興味がある人はご覧下さい。

前のプログラムの一行一行の動作を補足すると以下のようになります。

a = 100 a ← 100 変数aに100が代入される
a = a + 50 a ← a + 50 変数aの値は100だったので100+50、つまり150が変数aに代入される
print a, "\n" 変数 a の値、つまり 150を画面に表示し、改行する。

また、変数を何個も使ってみても同じことができます。

a = 100
b = 50
total = a + b
print total, "\n"

変数名のつけかた

さて、上では変数名を a や b や total としましたが、 別に他の名前をつけてもかまいません。 自分の好きな名前をつけてみてください。 ただし分かりやすい名前をつけるようにこころがけてください。 つまり、何という名前をつけたかすぐに忘れてしまうものや、 変数の用途が名前から連想できないものは良い変数名とは言えません。 例外として、従来から慣習として使っている1文字の変数名があります。 一般の変数として使う a,b,c や繰り返しに使う i,j,k 、繰り返し回数に使う n,m 、 座標に使う x,y,z などです。

また、変数名として付けられるのは、以下の条件にあてはまるものです。

以下に例を示します。

total_tax = 156
_max_value = 900
9max = 500 × 1文字目が数字なので使えない
max9 = 500 ○ 2文字目以降は数字が使える
if = 140 × if は予約語なので使えない
Total = 199 × Totalは変数ではなく、定数となる(今後他の値が代入できなくなる)

東京情報大学情報システム学科
大見 嘉弘(Yoshihiro OHMI)
<ohmi@rsch.tuis.ac.jp>