最近Rubyを書き始めました。Rubyで書かれたプログラムのコードを読んでいると、たまに「何だこれは..」となる記述に出くわすことがあるので、その時調べたもののメモ。
||=
値がnilの場合、右辺の値を代入して初期化してくれます。
以下のような動きをします。
a.rb
hoge = nil
hoge ||= "fuga"
p hoge #=> "fuga"
nilでないときは代入しません。
b.rb
hoge = "piyo"
hoge ||= "fuga"
p hoge #=> "piyo"
←[追記]
※falseの時にも代入されます。
hoge = false
hoge ||= "fuga"
p hoge #=> "fuga"
<=>
「UFO演算子」と呼ばれる比較演算子です。比較結果を数値で返してくれます。
- 左辺が大きければ1を返す
- 右辺が大きければ-1を返す
- 等しければ0を返す
100 <=> 10 #=> 1
100 <=> 200 #=> -1
100 <=> 100 #=> 0
<<
配列で自信の末尾に破壊的に値を追加してくれます。
array = [1, 2, 3, 4]
array << 5
p array #=> [1, 2, 3, 4, 5]
::
定数のスコープ演算子です。::
を使って定数を呼び出せます。
a.rb
class Hoge
FUGA = "piyo"
end
p Hoge::FUGA #=> "piyo"
こっちは定数でないので動きません。
b.rb
class Hoge
fuga = "piyo"
end
p Hoge::fuga #=> "piyo"
..
「範囲演算子」というもので、範囲オブジェクトを作ってくれます。
a.rb
p (0..10).to_a #=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
これは「…」だと最大値を含みません。
b.rb
p (0...10).to_a #=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
? (メソッド名に付く場合)
慣用的に真偽値を返すメソッド名で使われるようです。
def foo?
true
end
p foo? #=> true
# 否定と組み合わせて
p !foo? #=> false
# これは以下のように書き換えることも出来ます
p foo?.! #=> false
! (メソッド名につく場合)
「破壊的メソッド」と呼ばれるのメソッド名などで見かけます。
!が付くか付かないかでは挙動が違うメソッドがいくつかあるので注意が必要です。
例えばString#chop!
などの破壊的メソッドは、他の変数の参照先についても影響を与えてしまいます。
chop.rb
hoge = "hoge"
fuga = hoge
hoge.chop
p fuga #=> "hoge"
hoge.chop!
p fuga #=> "hog"
参考
- [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか
http://qiita.com/jnchito/items/dedb3b889ab226933ccf - Rubyで使われる記号の意味
http://docs.ruby-lang.org/ja/2.0.0/doc/symref.html