fugafuga.write

日々のログ

Ruby 2.x.x 入門 - 条件分岐 -

条件分岐について

条件分岐の種類

  • if
  • unless
  • case

真偽値について

真:false と nil 以外全部
偽:false と nil

if 文

if 条件 then
    真の時の処理
end
if 条件 then
    真の時の処理
else
    偽の時の処理
end
if 条件 then
    真の時の処理
elsif 条件その2 then
    条件その2が真の時の処理
else
    上記以外の時の処理
end

then は省略可能だよ。

unless 文

if 文の反対になる

unless 条件 then
    偽の時の処理
end
unless 条件 then
    偽の時の処理
else
    真の時の処理
end

ただし、unless には elsif 相当の文がありません。
使いどころがよくわからん。。。

(2014/9/16 追記)
unless 文に関しては、else 節はあまり使わないようです。
条件を満たさない時の処理を書きたい場合に使うみたい。

case 文

switch 文のような感じ。

case 比較したいオブジェクト
when 値その1
    オブジェクトが値その1と等しい時の処理
when 値その2
    オブジェクトが値その2と等しい時の処理
else
    上記以外の場合の処理
end

引っ掛ける値を複数持つことも可能。

item = "my item"

case item
when "my item",  "a", "c"
    puts "one"
when "b"
    puts "two"
else
    puts "else"
end

実行結果
one


オブジェクトのクラス判定。

item = "my item"

case item
when String
    puts "Im String."
when Numeric
    puts "Im Numeric."
else
    puts "else"
end

実行結果
Im String.

オブジェクトの比較

オブジェクトは、object_id という一意の値を持っている。
2つのオブジェクトが等しいかどうかを判断する場合、equal? メソッドを使用する。

item = "my item"
item2 = item
item3 = "my" + " item"

puts item.object_id
→ 70220730711020
puts item2.object_id
→ 70220730711020
puts item3.object_id
→ 70220735104680

p item.equal?(item2)
→ true
p item.equal?(item3)
→ false


(2014/9/16 追記)

if・unless 修飾子

if・unless を修飾子として使用できます。
if 文の処理が1行で済む場合などは、極力修飾子を使うのがgeekへの近道。
仕事でC++やJavaやってますが、PerlやRubyはこんな書き方できるみたいで羨ましい。

条件が真の時に実行したい式 if 条件式

# b が 0 より大きい場合、a に 1 を代入する
a = 1 if b > 0
条件が偽の時に実行したい式 unless 条件式

# b が 0 以外の場合、a に 1 を代入する
a = 1 unless b == 0


たのしいRuby 第4版

たのしいRuby 第4版

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版