たのしいRuby(第2版) 「はじめてのRuby」〜変数〜

■これは「たのしいRuby 第2版」を元にしています。
http://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC2%E7%89%88-Ruby%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%B0%97%E8%BB%BD%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%AB%98%E6%A9%8B-%E5%BE%81%E7%BE%A9/dp/4797336617/ref=pd_sim_b_img_6/250-4677527-6737860

変数

プログラミングに欠かせない要素として変数があります。変数とは、「もの」につける名札のようなものです。
オブジェクトに名札をつけるには、

 変数名 = オブジェクト

と書きます。このことを「変数にオブジェクトを代入する」といいいます。

ふむ。とりあえず、やってみましょう。

  • プログラム
name = "japanrock"
age  = 30

print "name = ", name ,"\n"
print "age  = ", age  ,"\n"

p name.class
p age.class
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
name = japanrock
age  = 30
String
Fixnum

name という変数に "japanrock" というStringのオブジェクトを代入してそれをprintで出力していますね。
同じように、age という変数に 30 というFixnumのオブジェクトをだ乳してそれをprintで出力しています。


変数の利用例として、直方体の表面積と体積を求めるプログラムを見てみましょう。

はーい。

  • プログラム
x = 10
y = 20
z = 30
area = (x*y + y*z + z*x) * 2
volume = x * y * z
print("表面積=", area, "\n")
print("体積=", volume, "\n")
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
楓ハ積=2200
体積=6000

計算結果は正しいですが、「表面積」という日本語が文字化けております・・・。しかし、今回は変数の回なので無視します・・。

変数をまったく使わなければ、

  • プログラム
print("表面積=",(10*20 + 20*30 + 30*10) * 2, "\n")
print("体積=",10*20*30, "\n")
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
楓ハ積=2200
体積=6000

といったプログラムになってしまいます。これでは値を1つ変更するために何ヶ所も修正しなければいけません。この例はたったの2行なのでたいしたことはありませんが、ちょっと大きなプログラムになると、そのような変更をきちんと行うのは大変な手間となります。

はい。そうなんです。これとっても重要です。うまくやれば1つの変更で済むのですが、100個も200個もあると、発狂しそうになります。まぁ、エディタにグレップ機能があって一斉置換なんて方法もあるのですが、10とか20とかのよくありがちな数字だったりすると、一斉置換ではうまくいかない場合があります。なので、変数に入れておくと目的のものだけを間違いなく修正できるので便利です。


名前重要

また、変数には、値が何を表しているのかを明確にするという意味もあります。したがって、わかりやすい名前を付けることが大切です。たとえば、

  • プログラム
hoge = "japanrock"
fuga = 30
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
hoge = japanrock
fuga = 30

たしかに、表示されましたが、変数名が何を表しているのか分かりにくいですね。
以下と比較してみましょう。

  • プログラム
name = "japanrock"
age  = 30

print "name = ", name ,"\n"
print "age  = ", age  ,"\n"
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
name = japanrock
age  = 30

"japanrock"は名前を表し、30は年齢を表しているというのがよく分かります。

変数名はプログラムの可視性を保つのにとっても、重要です。一度名前を付けると、いろいろな場所で使われていくので、変更がやっかいです。
変数名に限らず、メソッド名やクラス名なども同じことが言えます。

名前を付けるときは、少々時間がかかってもよいので、分かりやすく的確な名前をつけましょう。


おまけ

また、変数は以下のようにも代入できます。

  • プログラム
name, age, address = "japanrock", 30, "Tokyo"

print "name = ", name ,"\n"
print "age  = ", age  ,"\n"
print "address  = ", address  ,"\n"
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
name = japanrock
age  = 30
address  = Tokyo

変数の種類

変数には種類があります。


詳しくは、後日クラスやメソッドなどのところで行います。


プログラミング言語 Ruby リファレンスマニュアル



ちなみに、今回の例でりようした変数はすべてローカル変数です。


環境

C:\enjoy_ruby>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]