by shigemk2

当面は技術的なことしか書かない

破壊的メソッド

Rubyの「破壊的メソッド」 - バリケンのRuby日記 - Rubyist

こちらから。

Rubyインスタンスメソッドのうち、オブジェクト自身の内容を変えてしまうようなものを「破壊的メソッド」と呼ぶ。
多くの破壊的メソッドには、メソッド名の最後に「!」が付いている。
そしてこれはRubyのコーディング規約にもなっているので、
オブジェクト自身の内容を変更するユーザ定義関数を作成する場合は、
名前の最後に「!」をつけるのが望ましい。

例えば、

a = "abc"
def hoge(str)
  b = str.chop
  return b
end
puts a
puts hoge(a)
puts a

結果は

abc
ab
abc

また、破壊的メソッドを使った例を見てみると、

a = "abc"
def hoge!(str)
  b = str.chop!
  return b
end
puts a
puts hoge!(a)
puts a

こちらの結果は

abc
ab
ab

前者のhoge関数はaの中身を変えないが、
後者のhoge!関数はaの中身を変えてしまう。

スコープの問題か?とも思ったが、
単純に破壊的じゃないメソッドは値のコピーにアクセスしているだけだが、
破壊的メソッドは値の実体をアクセスしているため、オブジェクトの中身そのものが
変わってしまうのが理由のようだ。