まつもと ゆきひろです

In message "Re: [ruby-dev:41969] [Feature #3675] String#prepend, String#>>"
    on Tue, 10 Aug 2010 18:24:04 +0900, Sora Harakami <redmine / ruby-lang.org> writes:

|sorahです.
|
|通常, Stringでの文字列を手前に破壊的に加えるのは, a = "foo" + a 等で行いますが,
|直感で読みにくく, 記号などで書きにくくなっていると思います.

これは破壊的ではないですね。aに最初入っていた文字列は変更さ
れずに残ります。

|なので, String#prependと String#>> を追加するというのはどうでしょうか.

非常に興味深いです。ただ、いくつか気になる点があります。

(1) 実装上のことですが、appendと異なり、prependは、文字列領域
    を拡張した上で、現在の文字列の内容をコピーし、それから引
    数の内容を先頭からコピーすることになります。つまり、

     a = "foo" + a

    と比較して、コストはオブジェクトアロケーションひとつしか
    変わりません。それが本当にうれしいかやや疑問です。もっと
    も長い目で見るとGCへの負荷が軽いというメリットが出るケー
    スもあるでしょう。

(2) >> というのは考えてもみなかった面白い記法です。しかし、
    現状の文字列のメソッドで、引数のほうに破壊的な変更を加え
    るメソッドはなかったように思うので、やや躊躇します。もっ
    とも、Stringクラスでなければ、引数に破壊的な変更を加える
    メソッドはいくつもあるので、気にすることではないのかもし
    れません。

他の方のご意見も聞きたいです。

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