どなブロ

エンジニアァのブログです

たのしいRuby 第5章

冒頭に書く事が無くなってきた

条件判断

Rubyでの条件

  • 条件判断によく使用されるものとして比較演算子 → empty?メソッド
    正規表現でのマッチした部分の位置とマッチしなかった時のnil
  • Rubyの真偽値
    → falseとnilは偽
真偽
falseとnil、を除くオブジェクト全て
falseとnil

論理演算子

条件1 && 条件2    # AND
条件1 || 条件2    # OR
!条件            # 否定

if文

if 条件1 then1
elsif 条件2 then2
else3
end

Ex)

a = 10
b = 20
if a > 10  # thenは省略可
  puts "aはbよりも大きい"
elsif a < b
  puts "aはbよりも小さい"
else
  puts "aはbと同じ"
end

-> 結果
$ ruby if_elsif.rb

aはbよりも小さい

unless文

  • if文と逆の条件判断
unless 条件 thenend

Ex)

a = 10
b = 20
unless a > b
  puts "aはbより大きくない"
end

-> 結果
$ ruby unless.rb

aはbより大きくない

case文

case 比較したいオブジェクト
when1 then1
when2 then2
when3 then3
else4
end

Ex.1)

tags = [ "A", "IMG", "PRE"]
tags.each do |tagname|
  case tagname
  when "P", "A", "I", "B", "BLOCKQUOTE" # whenには複数の値を指定できる
    puts "#{tagname} has child."
  when "IMG", "BR"
    puts "#{tagname} has no child."
  else
    puts "#{tagname} cannot be used."
  end
end

-> 結果
$ ruby case.rb

A has child.
IMG has no child.
PRE cannot be used.


Ex.2) オブジェクトがどのクラスに属するのか、で判断もできる

array = [ "a", 1, nil]
array.each do |item|
  case item
  when String
    puts "item is a String."
  when Numeric
    puts "item is a Numeric."
  else
    puts "item is something."
  end
end

-> 結果
$ ruby case_class.rb

item is a String.
item is a Numeric.
item is something.

if修飾子とunless修飾子

  • ifやunlessは実行したい式の後ろに書くことができる
puts “aはbより大きいみたいですよ” if a > b

コラム

  • case文の条件判断は「===」という演算子を使っている → 左辺が数値や文字列の場合は単に「==」と同じ意味。正規表現の場合は「=~」同様マッチするか、クラスの場合は右辺がそのクラスのインスタンスかどうか。
  • 全てのオブジェクトには「アイデンティティ(ID)」と「値」がある → IDが同じかどうか比べるには「equal?」メソッド → 値が同じかどうか比べるときには「==」

感想

  • 大体基本的な書き方はjavaとイメージ変わらんな〜
  • いろんな書き方ができるんだな〜と思った
  • caseのwhenにマッチする条件まとめて書けるのいいな〜
  • rubyは自由度高い」ってのが少しわかった気がする
  • if修飾子とか簡潔には書けそうだけど、パッと見だと「え、なに?あぁ後ろに条件付いてるのね」とかなりそう。それなら3行割いてわかりやすく書いた方がいいかなあ〜


以上