冒頭に書く事が無くなってきた
条件判断
Rubyでの条件
真偽 | |
---|---|
真 | falseとnil、を除くオブジェクト全て |
偽 | falseとnil |
論理演算子
条件1 && 条件2 # AND 条件1 || 条件2 # OR !条件 # 否定
if文
if 条件1 then 文1 elsif 条件2 then 文2 else 文3 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 条件 then 文 end
Ex)
a = 10 b = 20 unless a > b puts "aはbより大きくない" end
-> 結果
$ ruby unless.rb
aはbより大きくない
case文
case 比較したいオブジェクト when 値1 then 文1 when 値2 then 文2 when 値3 then 文3 else 文4 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行割いてわかりやすく書いた方がいいかなあ〜
以上