💡
「?」、「!」で終わるメソッド(Ruby)
はじめに
今回は?や!で終わるメソッドを見ていきます。
Rubyのメソッド名は?や!で終わらせることができます。
?も!もこれだけで意味をもっているので、しっかり見ていきましょう!
?で終わるメソッド
?で終わるメソッドは慣習として真偽値(trueかfalse)を返すメソッドになっています。
このようなメソッドのことを述語メソッドと言います。
Rubyで最初から用意されている述語メソッドの中から、いくつかの例を見てみましょう。
# 空文字列であればtrue、そうでなければfalse
''.empty? #=> true
'abc'.empty? #=> false
# 引数の文字列が含まれていればtrue、そうでなければfalse
'watch'.include?('at') #=> true
'watch'.include?('in') #=> false
# 奇数ならtrue、偶数ならfalse
1.odd? #=> true
2.odd? #=> false
# 偶数ならtrue、奇数ならfalse
1.even? #=> false
2.even? #=> true
# オブジェクトがnilであればtrue、そうでなければfalse
nil.nil? #=> true
'abc'.nil? #=> false
1.nil? #=> false
!で終わるメソッド
!で終わるメソッドは、!が付いていないメソッドよりも危険という意味を持ちます。
よって、!で終わるメソッドを使うときは注意が必要です。
たとえば、Stringクラスにはupcaseメソッドとupcase!メソッドという2つのメソッドがあります。
どちらも文字列を大文字にするメソッドですが、
upcaseメソッドは大文字に変えた新しい文字列を返し、呼び出した文字列自身は変化しません。
それに対し、upcase!メソッドは呼び出した文字列自身を大文字に変更します。
a = 'ruby'
# upcaseだと変数aの値は変化しない
a.upcase #=> "RUBY"
a #=> "ruby"
# upcase!だと変数aの値も大文字に変わる
a.upcase! #=> "RUBY"
a #=> "RUBY"
変数には!や?は使えない
ちなみに、メソッド名は!や?で終わることができますが、
変数名には!や?を使えない点に注意してください(構文エラーになります)。
# ?で終わる変数名を定義しようとすると構文エラー
odd? = 1.odd?
#=> syntax error, unexpected '=' (SyntaxError)
# odd? = 1.odd?
# ^
# !で終わる変数名を定義しようとすると構文エラー
upcase! = 'ruby'.upcase!
#=> syntax error, unexpected '=' (SyntaxError)
# upcase! = 'ruby'.upcase!
# ^
さいごに
今回は!と?で終わるメソッドについて見てきました!
これらの意味を理解して、焦らず対応していきたいですね!
Discussion