まつもと ゆきひろです

In message "Re: [ruby-dev:44825] Re: [ruby-trunk - Feature #5584][Open] Array#sample!"
    on Mon, 7 Nov 2011 22:53:21 +0900, Yusuke Endoh <mame / tsg.ne.jp> writes:

|2011年11月7日15:43 Masaki Matsushita <glass.saga / gmail.com>:
|> ランダムに選択した要素をレシーバから取り除いて返すメソッドArray#sample!の追加を提案します。
|
|この機能はかつてから要望がありますが、まつもとさんが強硬に
|反対しています。[ruby-core:18104] [ruby-core:18165]
|
|sample! という名前が最大のネックのようですので、他の名前を
|考えるといいと思います。
|(案外まつもとさんの気が変わってる可能性もありますが)

まだ賛成ではありません。

最大の理由がこのメソッドが副作用を積極的に利用・期待している
点で、最近流行のプログラミングスタイルに逆行していることで、
さらにsample!は他のArrayのメソッドと!による意味が変化してい
るという点でこの名前による導入には絶対に賛成しません。

要するに他のArrayクラスの!メソッドの基本的な動作は、「!の無
いものは元のArrayをコピーして操作したものを返す。元の配列は変
化なし。操作によって変化しない場合にはnilを返す※」、というも
のなのに対し、提案されているsample!は「sampleと同じ操作をする
と*同時に*元の配列を変更する」というものです。ここが気に入ら
ない。

もちろん、副作用を全否定するわけではないので、このメソッドが
あるとどれだけ便利であるかを力説された上で、適切と思われる名
前を提案していただければ、絶対に無理とまでは言いませんが、ハー
ドルは高いと思います。

※ 正確には Array#slice! はこの原則に従ってませんが、だからと
いって原則に従ってメソッドを増やすつもりはありません

                                まつもと ゆきひろ /:|)