1. ホーム
  2. ルビー

[解決済み】Rubyのメソッドで感嘆符が使われるのはなぜ?

2022-03-23 18:14:54

質問

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クラスはこれに従っていることを覚えておいてください。また、コード内で何が変更されたかを追跡するのにも役立ちます。