[Ruby]オブジェクトが0かどうかを確かめたい!

zero?

レシーバーがゼロの時にtrueを、そうでない時にfalseを返すメソッド。

使う場面の例:if文 (よりスマートに書ける)

① obj = 0
p obj.to_i.zero?
=> true

obj = 1
p obj.to_i.zero?
=> false


② obj = ''
p obj.to_i.zero?
=> true


③ obj = nil
p obj.to_i.zero?
=> true


④ obj = 'test'
p obj.to_i.zero?
=> true

p obj.zero?
=> NoMethodError: undefined method `zero?' for "test":String


⑤ obj = ' '
p obj.to_i.zero?
=> true

p obj.zero?
=> NoMethodError: undefined method `zero?' for " ":String

0の時はtrue、1のような時はfalse

をto_iで数値にすると0なので、true

nilも数値にすると0なのでtrue

文字列はto_iを通すと0でtrue、そのままzero?するとエラーに

‘ ‘(半角スペース)も④と同様

nonzero?

zero?とは逆に、nonzero?はレシーバーがゼロの時にnilを、ゼロでない時にはレシーバーをそのまま返す。

obj = 1
p obj.nonzero?
=> 1

obj = 0
p obj.nonzero?
=> nil
タイトルとURLをコピーしました