[#21157] あったらうれしいメソッド to_n, to_n!, to_s! — ogino@...

荻野です。あったらうれしいメソッドということで書いてみます。

16 messages 2000/03/03

[#21159] メソッドの入り口 — ogino@...

荻野です。もうひとつご指導ください。

93 messages 2000/03/03
[#21170] Re: メソッドの入り口 — Shin-ichiro Hara <sinara@...> 2000/03/03

原です。

[#21243] Re: メソッドの入り口 — keiju@... (石塚圭樹) 2000/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#21247] Re: メソッドの入り口 — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/07

[#21267] 引数コピーとオブジェクト指向 (Re: メソッドの入り口) — Hideto ISHIBASHI <s34204@...> 2000/03/08

石橋秀仁です。

[#21272] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — 中村暁史 Nakamura Akifumi <BXQ04723@...> 2000/03/08

[#21276] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — nobu.nakada@... 2000/03/09

なかだです。

[#21279] Re: 引数コピーとオブジェクト指向 (Re: メソッドの入り口 ) — ogino@... 2000/03/09

oop未満の世界観の荻野です。

[#21282] Re: 引数コピーとオブジェクト指向 — Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp> 2000/03/09

越水です。

[#21285] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21293] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/10

松尾です。

[#21297] Re: 引数コピーとオブジェクト指向 — ogino@... 2000/03/10

荻野です。

[#21302] Re: 引数コピーとオブジェクト指向 — 土岐 仁謙 <toki@...> 2000/03/10

土岐です。

[#21371] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21374] Re: 引数コピーとオブジェクト指向 — TADA Tadashi <sho@...> 2000/03/13

ただただしです。

[#21365] Re: 引数コピーとオブジェクト指向 — Matsuo Hisanori <hisanori@...> 2000/03/13

松尾です。

[#21280] raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp>

24 messages 2000/03/09
[#21283] Re: raise non-Exception object — nobu.nakada@... 2000/03/09

なかだです。

[#21315] Re: raise non-Exception object — Kenichi Komiya <kom@...3.rim.or.jp> 2000/03/11

[#21342] Re: raise non-Exception object — nobu.nakada@... 2000/03/12

なかだです。

[#21384] ruby 1.4.4 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

35 messages 2000/03/13

[#21442] 配列内のソート — Takayuki Tanaka <tanaka@...>

こんにちは Tanです。

16 messages 2000/03/15

[#21583] ruby for Web — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

27 messages 2000/03/22
[#21584] Re: ruby for Web — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/03/22

なひです.

[#21649] net-1.1.10 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。net/http 使いたおし中。

17 messages 2000/03/27

[#21669] new version of mod_ruby & eRuby — Shugo Maeda <shugo@...>

前田です。

14 messages 2000/03/28

[ruby-list:21380] Re: 引数コピーとオブジェクト指向

From: Matsuo Hisanori <hisanori@...>
Date: 2000-03-13 06:59:11 UTC
List: ruby-list #21380
松尾です。

土岐 仁謙 wrote:

> def html_quote(data)
>   data = data.dup
>   data.gsub!(/&/, "&amp;")
>   data.gsub!(/</, "&lt;")
>   data.gsub!(/>/, "&gt;")
>   data
> end

これが、

  def html_quote(data)
    data.gsub(/&/, "&amp;").gsub(/</, "&lt;").gsub(/>/, "&gt;")
  end

こちらでないのは、

> 実用上はほとんど変わらないのだろうけど、なんとなく
> 破壊的メソッドの方が速度やメモリ消費の点で有利そうに思えるので。

「なんとなく」ということですね? 僕がレビューするならもう一度考えてきて
もらいます。

1 変換後の「値」が必要だ。dataの中身を変えたいわけじゃない。
2 破壊的なメソッドを使いたい。
3 でもdataは自分の責任範囲でないからdupする。

というのは本末転倒の様に見えませんか?

1 変換後の「値」が必要だ。dataの中身を変えたいわけじゃない。
2 非破壊的なメソッドを使う。

でいいじゃないですか?

僕から見ると、「値」と「インスタンス」の区別、「インスタンス」の操作責
任の明確化が不完全になっている印象を受けます。

# もちろん、後でチューン等する時に必要であれば「dup、破壊的メソッド」
# に変更するのは有り得ます。

## (そうした場合僕はその部分にコメントを入れます。「分かってない」と誤
## 解を与えない様にね)

--

> 思い返してみると、文字列以外のオブジェクトはまったくdupしたことが
> ないです。思うに、文字列はかなり特殊なのではないかという気がします。

そうなんです。アプリケーションで必要だから作ったクラスの「インスタンス」
は、滅多にdupする必要がないんです。これは経験的に同意頂けますよね。

数は「値」だからdupしなくていいんです。

で、String。

Stringは、アプリケーション中では殆どの場合「値」として使われるのに、実
装は「インスタンス」なんですね。だから破壊/非破壊なメソッドがある訳な
んです。僕に言わせると、「なんとなく」ではなく「値」か「インスタンス」
かで、使い分けをすべきなんです。


TADA Tadashi wrote:

>  粒度の違うモンを並べて「全部dupするかしないか選べ」つーのは乱暴
> だと思うんですよ。けっきょく「時と場合による」が至言ということか。

粒度の違うものを並べて、全部一つの同じ理由で「コピーが必要ない」と言っ
ているのではないのです。そうだとしたらおっしゃる通り、確かに乱暴。

粒度の違うものそれぞれが、それぞれ*別の理由*で「コピーが必要ない」ので、
結局全部「コピーが必要ない」ということになるわけです。まとめると以下の
通り。

1. 「値」はコピーする必要がない
2. (殆どの)「インスタンス」は、殆どコピーする必要がない
3. 「String(等、一部のクラスのインスタンス)」は、
3-1. 「値」としてみている時は(非破壊的なメソッドを使い)、コピーする必要がない
3-2. 「インスタンス」としてみている時は、殆どコピーする必要がない

--

こういう視点で見ていると、

「渡す前にコピー、貰った後でコピー、使う前にコピー」

というのは、プロジェクトの何処かに「値」と「インスタンス」の区別、「イ
ンスタンス」の操作責任の明確化ということに対して、余りセンシティブでな
い開発者がいるということになります。

不安になりませんか?

In This Thread