Ruby では、前髪 (!) を使用して、呼び出しているメソッドが であることをプログラマーに知らせますdestructive
。これは Ruby の言い方です。「このメソッドは、呼び出されたオブジェクトを変更します!」。String
、Array,
Enumerable` などのクラス の安全なメソッドの多くには、対応する破壊的なメソッドがあります。
例:
my_str = "Hello, World!"
my_str.downcase # => "hello, world!"
my_str # => "Hello, World!"
my_str = "Goodbye, World!"
my_str.downcase! # => "goodbye, world!"
my_str #> "goodbye, world!"
ご覧のとおり、どちらのメソッドも文字列の小文字のバリアントを返しますが、downcase!
実際にはmy_str
永続的に変更されます。
もっと多くの言語が提供されることを望むのは、Ruby の非常に便利な側面です。
また、破壊的なメソッドはインプレースで動作するため、新しいオブジェクトを返さなければならない安全なメソッドよりも一般的に高速でメモリ効率が高いことも言及する価値があると思います。したがって、可能な限りmy_string.downcase!
を優先する必要があります。my_string = my_string.downcase