破壊的メソッド

Ruby のメソッドには、よく ! が付いているものと、付いていないものがあります。たとえば Array#reverse でいえば、 Array#reverse と Array#reverse! の二種類が用意されています。前者は、配列を逆順にしたものを戻り値として返すだけですが、後者は配列そのものを逆順にしてしまいます。後者のようなメソッドは「破壊的メソッド」と呼ばれます。

……これは、ずいぶん前に理解していたのですが、先ほど配列をソートするときに以下のように書いてはまってしまったので、同じ過ちを繰り返さないようエントリとして残しておくことにします。

def sort(arr)
  arr.sort { |a, b|
    a <=> b
  }
  return arr
end

で返ってきた中身が何も変わっていないのにしばしはまってしまいました。こういうときは、 arr.sort! { ... としなければならない。あー、もう……。