変数・演算子


変数と代入

変数とは、(データ)に付けるラベルのようなものである(「値を入れる箱のようなもの」というふうに説明される場合も多い)。変数と値を連結することを代入という。 たとえば、下記のソースコードは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

解説:


変数名に関する規則

変数の名前はプログラマーが自由に選べるが使える名前については下記のルールがある。


演算

算術演算

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)/3
x+y+z
─────
a+b+c
(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 + 1x += 111
x = x * 2x *= 220
x = x - 1x -= 19
x = x / 2x /= 25
x = x % 3x %= 31
x = x ** 2x **= 2100

論理演算

制御構造の判定条件式等に利用する演算子のことを論理演算子という。基本的なプログラムでも頻繁に利用するものを以下に示す。

比較演算子 意味
== 左辺と右辺が等しいかの判定
< 左辺が右辺より小さいかの判定
<= 左辺が右辺以下かの判定
> 左辺が右辺より大きいかの判定
>= 左辺が右辺以上かの判定
&& 「かつ」(2つ以上の条件を組み合わせる時に使用)
and 「かつ」(2つ以上の条件を組み合わせる時に使用)
|| 「または」(2つ以上の条件を組み合わせる時に使用)
or 「または」(|| と同じ意味)
! 否定
not 否定(! と同じ意味)

論理演算子を使うと、指定された条件が満たされているかどうかによって、結果はtrue(真)かfalse(偽)になる。

 練習問題  bool_test.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

x = 10
y = 5

puts(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

例:

下記のプログラムを作成し、データ型の特徴を確認しよう。

 練習問題  data_types.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
  
print "整数の割り算: 5 / 2 => "
puts 5 / 2

print "小数点数の割り算: 5.0 / 2.0 => "
puts 5.0 / 2.0

print "整数と小数点数の割り算: 5 / 2.0 => "
puts 5 / 2.0

print "小数点数と整数の足し算: 5.0 + 2 => "
puts 5.0 + 2

print "文字列の足し算: '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

解説:

修正点:

emacsではカーソルが何行目にあるか容易に確認できる。emacsの下部に以下の表示がある。このうちL3が行数をあらわす。これを見れば現在3行目にいることがわかる。

-かんな-U:--   helloworld.rb      ALL  L3

デバッグの練習

下記のプログラムを入力・実行し、エラーがあればデバッグを行ってみてください。

 練習問題  debug_exercise.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

num1 = 10
num2 = 15
num3 = 20
result = num1 + num / num3
puts result

本日の演習課題

 基本課題 

変数と演算子を使って、10年後の自分の年齢を計算し表示するプログラムage_calc.rbを作成せよ

実行結果の例:

sime{c11xxxx}% ruby age_calc.rb
今の年齢: 20
10年後の年齢: 30

本文は下記の通り記入してください.

氏名: 苗字名前
学籍番号: C11xxxxx

ソースコード:
...

実行結果:
...

 発展課題 

  1. 下記の計算を行い結果を表示するRubyプログラムを作成せよ。\(x\) の値は 5 とする。

    • \( 2x^2 - 5x - 3 \)
    • \( (2x + 1)(x - 3) \)
    • \( \frac{x + 1}{1 - \frac{1}{1 + x}} \)
  2. 商品の税抜価格と消費税率に基づき、税込価格を計算し表示するプログラム price_calc.rb を作成せよ。税抜価格と消費税率は変数を用いて定義すること。

    実行結果の例:

    sime{c11xxxx}% ruby price_calc.rb
    税抜価格: 999円
    消費税率: 10%
    税込価格: 1098.9円
    
  3. 三角形の底辺と高さから面積を計算するプログラム triangle_area.rb を作成してください。底辺と高さは変数を用いて定義すること。

    実行結果の例:

    sime{c11xxxx}% ruby price_calc.rb
    底辺: 7
    高さ: 10
    面積: 35.0
    

目次