2012年7月10日火曜日

delete_ifって破壊的メソッドなのか…

Rubyでプログラムを書く時に「仕様では無いけど慣習になっている書き方」ってあると思います。

例えば、真偽値を返すメソッドはメソッド名の最後に"?"が付く。などです。
(#blank?, #nil?)など。

こう言った慣習の一つに、「"!"が最後に付くメソッドは破壊的なメソッド」と、言うのがあります。

例えばArrayのメソッドに#rejectとと言うメソッドと#reject!と言うメソッドがあり、!が付いている方は破壊的なメソッドで、付いていない方は破壊的でないメソッドです。

こう言った慣習は分かりやすくて良いのですが、例外もあるようです。
今日、Array#delete_ifと言う"!"が付いていない破壊的なメソッドを、破壊的で無いメソッドだと勘違いしていてハマりました。

慣習は便利ですが、実際の動作も良く確認しないといけないですね。

追記:もしかして、"!"は、あくまで破壊的なメソッドと非破壊的なメソッド両方がある場合に両者を区別しやすくする時に付ける物であって、元々破壊的なメソッドしか無い場合には付けないものなのか....?

0 件のコメント:

コメントを投稿