Rubyの関数名の感嘆符「!」と疑問符「?」の意味
Ruby on Railsをお勉強中なのです。
ところどころ出てくるメソッドの!
と?
について、すこし整理してみます。
感嘆符「!」
これは破壊的メソッドを表します。 Rubyのリファレンスには、以下のようにあります。
「!」はメソッド名の一部です。慣用的に、 同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッド(例: tr と tr!)で使われます。
例えば、sort
関数の場合、以下のようになります。
array = [3, 1, 5, 2, 4]
a = array.sort
p a # => [1, 2, 3, 4, 5]
p array # => [3, 1, 5, 2, 4]
b = array.sort!
p b # => [1, 2, 3, 4, 5]
p array # => [1, 2, 3, 4, 5]
一言で言うと「メソッドを呼びだしたオブジェクト自身が影響を受ける」、という感じでしょうか。。。
疑問符「?」
これは真偽値を返すメソッドを表します。 Rubyのリファレンスには、以下のようにあります。
この場合の「?」はメソッド名の一部分です。 慣用的に、真偽値を返すタイプのメソッドを示すために使われます。
これは直感的に分かりやすいです。
p @foo.nil? # => true
@foo = 'foo'
p @foo.nil? # => false
おわりに
自分でメソッドを定義するときは、この2点をしっかりおさえて作るようにします。。。