ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

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点をしっかりおさえて作るようにします。。。