Techioz Blog

Ruby メソッドで感嘆符が使用されるのはなぜですか?

概要

Ruby では、一部のメソッドには、include? のような質問をする疑問符 (?) が付いています。問題のオブジェクトが含まれているかどうかを尋ねると、true/false が返されます。

しかし、一部のメソッドには感嘆符 (!) があり、他のメソッドには付いていないのはなぜでしょうか?

それはどういう意味ですか?

解決策

一般に、! で終わるメソッドは、メソッドが呼び出されたオブジェクトを変更することを示します。 Ruby はこれらを「危険なメソッド」と呼んでいます。これは、他の誰かが参照している可能性のある状態を変更するためです。文字列の簡単な例を次に示します。

foo = "A STRING"  # a string called foo
foo.downcase!     # modifies foo itself
puts foo          # prints modified foo

これにより以下が出力されます:

a string

標準ライブラリでは、類似した名前のメソッドのペア (! が付いたメソッド) が多くの場所で見られます。そしてなしのもの。そうでないものは「安全なメソッド」と呼ばれ、呼び出し先を変更せずに、コピーに変更を適用した元のコピーを返します。 ! を除いた同じ例を次に示します。

foo = "A STRING"    # a string called foo
bar = foo.downcase  # doesn't modify foo; returns a modified string
puts foo            # prints unchanged foo
puts bar            # prints newly created bar

これにより次の出力が出力されます。

A STRING
a string

これは単なる慣例ですが、多くの Ruby クラスがこれに従っていることに注意してください。また、コード内で何が変更されたかを追跡するのにも役立ちます。