第1回目の授業で説明したように,S@pphireにはいくつか不具合があります.そ
の中で特に問題になるのは,起動直後の何もスクリプトを入力していない状態で,
何かのファイルを開こうとしたときに,保存するかを確認するダイアローグが出
ることです.その場合には,決して保存を選択しないで下さい.新規に開こうと
するファイルの中身をすべて消してしまいます.
- 基本
スクリプトを次のように修正します.
for i in 1..20
sum = i + 100
printf "Iteration time: %d\n", i
printf "Number: %d\n\n", sum
end
|
sum というよくわからないものが新たに登場しました.これは自分で
勝手に名前をつけた「変数」です.sum というのは英語で
「和」のことですので,何かの和を表す変数と言うことになります.そ
して,その中身には等号の右側にあるように,繰り返しの中で順番に増
えて行くこれも変数の i に100を加えたものということにな
ります.
ところで,もともとのスクリプト自体にも変数が最初から使用されていたことに
気づいたでしょうか.1行目に唐突に i という文字が登場し
ています.for は予約語として登録されているので,意味の
あるものでしたが,この i も実は名前を自由につけても良い
変数でした.ただし,for を使う構文ではこの変数はとりあ
えず必要ですが,大して重要な意味が無いため,簡単な名前をつけるこ
とが大半です.i というのは後で出てくる整数の英語
Integer を連想させるための名前です.
- 名前の約束
変数は複数の文字を使って名前づけをするこ
とが出来ます.ただし,数字で始まるものはダメですし,大文字で始まるもの
は別の「定数」と呼ばれるものになります.さらに,途中にスペースを含むこ
ともダメです.英語の小文字で始め,アルファベットと数字,
アンダースコア (_) を使うのが良いでしょう.長いスクリプトや人に見せるた
めのスクリプトでは,変数の名前によりその中身の意味がすぐにわかるものが
望ましいと言えます.上の例では,
「和」の英語「sum」であれば,それが意味するものが和であることも容易に想
像できます.ですので,それなりに意味を踏まえた名前づけが大事です.
しかし,変数名には使ってはいけ
ない「予約語」というものがあります.これは,これらの単語にはあらかじめ
意味のある動作が割り振られているので,変数名に使ってはいけないと言うも
のです.Rubyの場合は
リンク先のようなものがあります.
- 代入
スクリプトに戻りましょう.2行目は「代入」と呼ばれる操作です.数学では等号 (=) は両辺
が等しいと言う意味ですが,計算機言語においてはほぼ全ての場合において
右辺
の値を左辺に代入する操作になります.ここでは, sum という名前の変
数に i + 100 という式の計算結果の値を代入しています.
- 型
変「数」と言っていますが,変数が扱えるのは「数値」だけではありません.前
回の授業で行った出力における「文字列」もある「値」として考えます.そのた
め,自分が扱っている「値」は何なのか,把握しておかないと間違いの元になり
ます.文字や数値を区別するために,変数には「型」(type)があります.
C言語などでは,最初にユーザがその型を指定し
てやらないといけないのですが,Rubyにおいてはあまり意識する必要はありませ
ん.Rubyの方で,「よきに計らって」くれます.しかし,一応は意識しておかな
いと重要な間違いに発展することがありますので,やはり注意は必要です.
さて,型には次のようなものがあります.
- 文字列 (String)
- 整数 (Integer)
- 浮動小数点数 (Floating point number)
文字列は最初に見たように,文字のつながりです.これも「値」として意味があ
ります.整数はたぶん分かるでしょうが,「浮動小数点数」は分かりに
くい名前ですね.要は,「実数」(小数点以下の部分を含む数) です.「分数」
のような概念はありません.整数は普通に 1 とか 21 のよ
うに表します.浮動小数点数は小数部分をつけて,1.0 や
12.3456 のようにして表現します.次のようにしてみると,整数と文字列
の型の違いの意味がわかるでしょうか?
上側の例は,二重引用符が無いので整数の演算が puts の引数になっ
ていますが,下側は二重引用符があるので,その内側は数値ではなくただの文字
です.
繰りかえしになりますが,最初のスクリプトの例や上の例のように,Rubyで数式を記述するときには演算子
の両側に一文字分空白を置くようにしましょう.二項演算子と単項演算子の処理
の違いから来る間違いを防ぐことができるので,うっかりミスを防ぐ助けになり
ます.
C言語と異なって変数の型がRubyにおいては自在に変更可能であることが次の
例で分かるでしょう.
a = 1
puts a
a = 2.0
puts a
a = "abc"
puts a
|
整数型の演算において注意しなければならないことは割算(除算)における考え方
です.次回に詳しく紹介しますが,次の例を試してみて,自分で動作を確認し
てください.
puts 1 / 3
puts 1.0 / 3
puts 1 / 3.0
|
- 定数他
変数は名前のごとく変化する数ですので,スクリプトが動作する途中で値が変わ
ることもよくあります.しかし,最初に決めたらそれは変更しない,という値も
必要になることがあります.そのような場合に「定数」を用います.これは,名
前をアルファベットの大文字で始めることで定数として「定義」出来ます.定数
の値を変更しようとすると,スクリプトの実行時にメッセージが表示されます.
CONSTANT = 1
CONSTANT = 2
puts CONSTANT
|
を試してみると,
tmp.rb:2: warning: already initialized constant CONSTANT
|
が出てきます.残念ながらメッセージは英語なのですが,難しくは無いのでお分
かりになるでしょう.2行目に問題があることが最初に示され,値を変更しよう
とするときに定数であることを指摘されています.
ただし,結果の方は一応変更後の値である「2」が出力されています.
また,変数には実は「グローバル変数」や「インスタンス変数」など,いろいろな種類
があります.しかし,この授業はそのような特殊な変数は扱いません.「ローカル変
数」という変数を上では紹介して利用していますが,それをここでは変数と呼ん
で,それだけを扱うことにします.