From: TADA Tadashi Date: 2000-03-13T17:52:52+09:00 Subject: [ruby-list:21382] Re: 引数コピーとオブジェクト指向 ただただしです。 #書いてるうちに話が進んじゃってるけど出しちゃおう。 Matsuo Hisanori wrote: ># '(笑)'には多少ムッとしましたよ…。  面目ない。おっちょこちょいで、すみません。 ># Stringがちょっと違うな、と言うのは共通認識としていいみたいですね。では…。  そうですね。 >sub と sub! の使い分けはどの様にお考えでしょうか? > >利用する側の気分、というのは無しですよ。  sub!は使いません……というのはダメ? いやマジなんですけど。 >Integerの様な「値」として扱いたい時は sub ># age = age + 1 ># name = name.sub(...) > >Sectionの様な「インスタンス」として扱いたい時は sub! ># section.setName('庶務二課') ># name.sub!(...) > >としています。  この分類はわからなくもないけれど、私はStringのようなプリミティブ ものをインスタンスとして扱うことはまずないです。たしかにメソッドを いくつか持っていて、オブジェクトのごとく振る舞いますが、「設計」な んて言葉が出てくるような局面で、Stringが値ではなくインスタンスとし て出てくるような使い方はしませんねぇ。  Stringには値としてしか振る舞わせたくないからdupする、が私のスタ ンスです。実際、自分で書いたRubyスクリプトの中でsub!系を使っている のは、メソッド内の作業用変数くらいでした。 #自分しか使わない(=破壊的メソッドを使わない)のがわかっているので #dupも使っていませんが、人に使わせるつもりならdup(もしくはfreeze) #するでしょう。 >「値」と「インスタンス」の区別 >「インスタンス」を操作できる責任の明確化 > >が出来ていれば、やっぱりdupする必要は(殆ど)ないんですよ。  一番最初のPersonクラスの場合は、nameを操作できる責任が明確化でき ないじゃないの、という(たしか荻野さんの?)指摘を私は支持します。と いうか、誰も指摘してなくても私はそう思う。  Personとその呼び出し元の関係だけに着目すれば、ドキュメントに書く ことで回避できるかも知れないけど、nameへの参照はPersonを書いた人が あずかり知らぬほど隔たったところまで行くかも知れませんから。松尾さ んが[ruby-list:21286]でおっしゃられていることもわかるんですけど、 ことRubyのStringに関して言えば、(インスタンスとして)ナマで使うのは 危なすぎると思います。 #自分にはJavaのStringが一番しっくりくるのかな。Stringはnewする端 #からfreezeするのがいいのかも……。 と、ここまで書いて席を離れてたら[ruby-list:21380]が届いて、松尾さ んとはそんなに隔たりがあるわけじゃないようだと思いました。私も「イ ンスタンス」をdupするなんて、夢想だにしませんから。  違いは Stringを「インスタンス」として扱うことがあるかどうかだけ じゃないでしょうか。実際、RubyのStringをインスタンスとして使うこと ってありますか? >松尾さん #私はないです。破壊的メソッドなんていらない。と言ってしまおう(笑) ---- □Don't □ ただただし@神奈川県相模原市 □Think,□ カブ http://www.bekkoame.ne.jp/~sho/cub/ □Buuuy.□ こま犬 http://www.bekkoame.ne.jp/~sho/komainu/