変数とは、値(データ)に付けるラベルのようなものである(「値を入れる箱のようなもの」というふうに説明される場合も多い)。変数と値を連結することを代入という。 たとえば、下記のソースコードはnumberという変数に1という数値が代入される代入式の例である。
number = 1
「=」は代入演算子といい、右辺の値を左辺に記した変数へ代入する機能を持つ。
代入式の左辺以外の場所で変数名が現れた場合、その場所にその変数の値が書かれたものとして扱われる。変数に代入したデータを利用することを、「変数の参照」という。 下記のプログラムで試してみよう。
練習問題 var_ref.rb注意:左側に標示されている行番号は入力しないでください。#!/usr/koeki/bin/ruby# -*- coding: utf-8 -*-number1 = 1 #(値を)代入puts number1 # 参照number2 = number1 + 1 #(式の)代入 / number1の参照puts number2 # 参照
実行結果:
sime{c11xxxx}% ruby var_ref.rb
1
2
解説:
変数の名前はプログラマーが自由に選べるが使える名前については下記のルールがある。
〇 price
〇 price2
〇 new_price
〇 i
✖ 値段
✖ father-in-law
✖ kn@mail.jp
✖ new price
〇 seven11
✖ 7eleven
Price ≠ price
team_a ≠ team_A
PI
BASE_PRICE
Pi
BasePrice
| BEGIN | class | ensure | nil | self | when |
| END | def | false | not | super | while |
| alias | defined? | for | or | then | yield |
| and | do | if | redo | true | __LINE__ |
| begin | else | in | rescue | undef | __FILE__ |
| break | elsif | module | retry | unless | __ENCODING__ |
| case | end | next | return | until |
| 〇 price | ✖ p |
| 〇 birthplace | ✖ bp |
ヒント: 長い変数名を使うとその変数を参照する度にタイピングが多いので面倒だと思うかもしれない。しかし、Emacs をはじめとするプログラマー用のテキストエディタには補完機能が搭載されているので既にソースコードに入っている名前を再び入力する時は2,3文字を打てば残りの部分は自動的に追記される。時間の節約だけではなく、変数名の綴り間違いでエラーになるという問題を防ぐこともできるので、 積極的に利用してください。Emacsで補完機能を使う方法:(1) 再び入力したい名前の最初の2、3文字を打つ;(2) M-/ を押す(つまり、「Esc」キーと「/」キーを同時に押す)。
また、極端に長くなる場合は、下記のように単語の意味が分かる範囲で一部の文字を省略しても良い。
organization_name => org_name
maximum_text_length => max_text_len
Rubyで数値計算を行なうには、数学とほぼ同じ書き方で記述する。ただし、掛算記号は * 、割算記号は / で表す。括弧は丸括弧 ( ) 一種類だけを使用し、式全体が1行で完結するように書く。
代表的な演算子:
| 演算子 | 意味 | 例 |
|---|---|---|
| + | 加算 | 2 + 5(2に5を加える) |
| - | 減算 | 6 - 3(6から3を減じる) |
| * | 乗算 | 9 * 2(9に2をかける) |
| / | 除算 | 12 / 4(12を4で割る) |
| % | 剰余 | 9 % 2(9を2で割った余り) |
| ** | べき乗 | 2 ** 8(2を8乗する) |
数学と同じく、演算子には優先順位がある:
したがって、1+2*3は2*3が先に行われ7に、3*2**3は2**3が先に行われ24になる。ただし括弧があれば、先に括弧内が計算される。(1+2)*3は9に(3*2)**3は216となる。
数式と対応するRubyの書き方の例:
| 数学 | Rubyの式 | |||
|---|---|---|---|---|
1+2×3 |
1+2*3 |
|||
(1+2)÷3 |
(1+2)/3 |
|||
|
(x+y+z)/3 |
|||
|
(x+y+z)/(a+b+c) |
次のものは変数への代入を伴う。
| 代入演算子 | 意味 |
|---|---|
| = | 通常代入 x=5 |
| += | 加算代入 x+=5 でxが5増える |
| *= | 乗算代入 x*=5 でxが5倍になる |
| -= | 減算代入 x-=5 でxが5減る |
| /= | 除算代入 x/=5 でxが1/5になる |
| %= | 剰余代入 x%=5 は x = x%5 と同じ |
| **= | べき乗代入 x**=5 は x=x**5と同じ |
変数xの値が10であると仮定したときに、
代入演算によってxがどう変わるかを示す。
| 通常代入の場合 | 代入演算 | その後のxの値 |
|---|---|---|
x = x + 1 | x += 1 | 11 |
x = x * 2 | x *= 2 | 20 |
x = x - 1 | x -= 1 | 9 |
x = x / 2 | x /= 2 | 5 |
x = x % 3 | x %= 3 | 1 |
x = x ** 2 | x **= 2 | 100 |
制御構造の判定条件式等に利用する演算子のことを論理演算子という。基本的なプログラムでも頻繁に利用するものを以下に示す。
| 比較演算子 | 意味 |
|---|---|
| == | 左辺と右辺が等しいかの判定 |
| < | 左辺が右辺より小さいかの判定 |
| <= | 左辺が右辺以下かの判定 |
| > | 左辺が右辺より大きいかの判定 |
| >= | 左辺が右辺以上かの判定 |
| && | 「かつ」(2つ以上の条件を組み合わせる時に使用) |
| and | 「かつ」(2つ以上の条件を組み合わせる時に使用) |
| || | 「または」(2つ以上の条件を組み合わせる時に使用) |
| or | 「または」(|| と同じ意味) |
| ! | 否定 |
| not | 否定(! と同じ意味) |
論理演算子を使うと、指定された条件が満たされているかどうかによって、結果はtrue(真)かfalse(偽)になる。
練習問題 bool_test.rb#!/usr/koeki/bin/ruby# -*- coding: utf-8 -*-x = 10y = 5puts(x == y)puts(x > y && y < 7)puts(x < y || y < 7)puts(not(y < 7))
実行結果:
sime{c11xxxx}% ruby bool_test.rb
false
true
true
false
解説:
プログラミングでは数値や文字列など、様々な種類(「型」)のデータを使う。Rubyはいわゆるオブジェクト指向プログラミング言語の一つで、「全ての値はオブジェクト(object)である」という特徴がある。そして、全てのオブジェクトがそれぞれ何らかの型に属する。この型のことをクラス(class)と言う。以下はRubyの基本的なデータ型の例を示す。
| 型名(クラス名) | データの種類 | 例 |
|---|---|---|
| Integer | 整数 | 1, 0, 1000, -121 |
| Float | 小数点数 | 1.0, 0.2134, 3.33333, -0.5135 |
| String | 文字列 | "Hello World", 'Ruby' |
| Array | 配列 | [5, 7, 11, 13], ["Adam", "Anna", "Mark"] |
| TrueClass | 真(論理値) | true |
| FalseClass | 偽(論理値) | false |
| NilClass | 値がない状態 | nil |
文字列(String)はダブルクォート(")か、シングルクォート(')で括って表記する。
配列(Array)は複数の値を保管できるデータ型である(詳しくは今後の授業で説明する)。
trueとfalseは「ある条件が成り立つか否か」、を表す時に使われる。
| 「条件が成立する」 | → | true |
| 「条件が成立しない」 | → | false |
例:
trueとなる条件式
5 > 3
2 < 9
falseとなる条件式
5 < 3
2 > 9
下記のプログラムを作成し、データ型の特徴を確認しよう。
練習問題 data_types.rb#!/usr/koeki/bin/ruby# -*- coding: utf-8 -*-print "整数の割り算: 5 / 2 => "puts 5 / 2print "小数点数の割り算: 5.0 / 2.0 => "puts 5.0 / 2.0print "整数と小数点数の割り算: 5 / 2.0 => "puts 5 / 2.0print "小数点数と整数の足し算: 5.0 + 2 => "puts 5.0 + 2print "文字列の足し算: '5' + '2' => "puts '5' + '2'
実行結果:
sime{c11xxxx}% ruby data_types.rb
整数の割り算: 5 / 2 => 2
小数点数の割り算: 5.0 / 2.0 => 2.5
整数と小数点数の割り算: 5 / 2.0 => 2.5
小数点数と整数の足し算: 5.0 + 2 => 7.0
文字列の足し算: '5' + '2' => 52
解説:
プログラムを作成して最初から問題なく動くことはまれである。必ず間違いはあるものなので、その間違いを特定し、修正しながら完成へ向かっていくのが一般的な作成方法である。
ちなみに、プログラムの間違いはバグといい、それを見つけて正しく修正する作業のことをデバッグという。
以下のプログラムは間違っている例なので、エラーメッセージを見るためにその通りに入力してください。
練習問題 error_test.rb#!/usr/koeki/bin/ruby# -*- coding: utf-8 -*-prnit "Hello World!\n"
プログラムを実行したら次のエラーメッセージが表示される。
Traceback (most recent call last):
./helloworld.rb:3:in `<main>': undefined method `prnit' for main:Object (NoMethodError)
Did you mean? print
解説:
./helloworld.rb:3」は、helloworld.rb の3行目がおかしいことを示している。in `<main>': undefined method `prnit' for main:Object (NoMethodError)」は、「prnit」というメソッドは定義されていないということを示している。prnit」ではなくて「print」ではないですか?ということを示している。修正点:
prnit」は「print」に修正する。emacsではカーソルが何行目にあるか容易に確認できる。emacsの下部に以下の表示がある。このうちL3が行数をあらわす。これを見れば現在3行目にいることがわかる。
-かんな-U:-- helloworld.rb ALL L3
下記のプログラムを入力・実行し、エラーがあればデバッグを行ってみてください。
練習問題 debug_exercise.rb#!/usr/koeki/bin/ruby# -*- coding: utf-8 -*-num1 = 10num2 = 15num3 = 20result = num1 + num / num3puts result
変数と演算子を使って、10年後の自分の年齢を計算し表示するプログラムage_calc.rbを作成せよ
実行結果の例:
sime{c11xxxx}% ruby age_calc.rb
今の年齢: 20
10年後の年齢: 30
本文は下記の通り記入してください.
氏名: 苗字名前
学籍番号: C11xxxxx
ソースコード:
...
実行結果:
...
発展課題
下記の計算を行い結果を表示するRubyプログラムを作成せよ。\(x\) の値は 5 とする。
商品の税抜価格と消費税率に基づき、税込価格を計算し表示するプログラム price_calc.rb を作成せよ。税抜価格と消費税率は変数を用いて定義すること。
実行結果の例:
sime{c11xxxx}% ruby price_calc.rb
税抜価格: 999円
消費税率: 10%
税込価格: 1098.9円
三角形の底辺と高さから面積を計算するプログラム triangle_area.rb を作成してください。底辺と高さは変数を用いて定義すること。
実行結果の例:
sime{c11xxxx}% ruby price_calc.rb
底辺: 7
高さ: 10
面積: 35.0