Rubyの勉強 (3) - 演算子
Rubyで用いられる演算子
高い :: [] +(単項) ! ~ ** -(単項) * / % + - << >> & | ^ > >= < <= <=> == === != =~ !~ && || .. ... ?:(条件演算子) =(+=, -= ... ) not 低い and or
ほとんどはメソッドの特殊な表記である.例えば
irb> 1 + 1 => 2 irb> 1.+(1) => 2
ただし,以下の演算子はメソッドではなく制御構造である.
= ?: .. ... ! not && and || or ::
範囲演算子
'm..n'や'm...n'を用いると,m〜nまでの範囲を表すRangeオブジェクトが返される.'...'の場合はnを含まない.
irb> (0..10).class => Range irb> (0..10).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] irb> (0...10).to_a => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] irb>
to_aはオブジェクトを配列で表現した値を返すメソッド.
文字列に対して範囲演算子を適用することもできる
irb> ("a".."e").to_a => ["a", "b", "c", "d", "e"] irb> ("aa".."zz").to_a => ["aa", "ab", ... "zy", "zz"]
例えばfor文で用いたりする
for i in 0..9 puts i end
eachを使うと
(0..9).each {|i| puts i}
で同様のことができる
Floatのようにiterateできない場合はto_aやeachは失敗する.
irb> (0.1..0.2).to_a TypeError: can't iterate from Float irb> (0.1..0.2).each {|i| puts i} TypeError: can't iterate from Float
ただし,include?などの他のメソッドは利用できる
irb> (0.1..0.2).include?(0.15) => true
a <=> b
比較演算子の一つ.a > bの時,正の値を返し,a < bの時,負の値を返し,a == bの時0を返すような演算子.
irb> 1 <=> 2 => -1 irb> 2 <=> 1 => 1 irb> 1 <=> 1 => 0
Array#sortでブロックが与えられない場合,デフォルトで<=>が用いられる
irb> [3, 1, 4, 2, 5].sort => [1, 2, 3, 4, 5] irb> ["foo", "bar", "spam", "egg"].sort => ["bar", "egg", "foo", "spam"]
a === b
case文は===で比較を行う.
case month when 3..5 puts "spring" when 6..8 puts "summer" when 9..11 puts "autumn" else puts "winter" end
は
if (3..5) === month puts "spring" elsif (6..8) === month puts "summer" elsif (9..11) === month puts "autumn" else puts "winter" end
とほぼ同じ.ここで,Range#===はRange#include?と同じメソッドである.