[#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

荻野です。

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

松尾です。

[#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

ただただしです。

[#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:21302] Re: 引数コピーとオブジェクト指向

From: 土岐 仁謙 <toki@...>
Date: 2000-03-10 15:43:32 UTC
List: ruby-list #21302
土岐です。
# ruby-listにメールを出すのはひさしぶりです。
# 修論に追われてたもんで...

{Date} Fri, 10 Mar 2000 22:03:09 +0900
{Subject} [ruby-list:21297] Re: 引数コピーとオブジェクト指向
{Message ID} <xnmg0tzq8ok.wl@nancy.coop.nagoya-u.ac.jp>
ogino@coop.nagoya-u.ac.jp wrote...

ogino> name = 'John'
ogino>   :
ogino> john = Person.new (name.dup)
ogino>   :
ogino>   :
ogino> name.sub! (....)

このコードを見てふと気づいたことがあったので、
ちょっと自分なりにまとめてみました。
わたしはこの手のオブジェクトの状態を変化させるような
コードを書くとき、いつも次の様にしています。

name = 'John'
  :
john = Person.new (name)
  :
  :
name = name.dup
name.sub! (....)

オブジェクトの参照を増やす所(Person.new (name))ではなくて、
オブジェクトの状態を変化させる手前(name.sub! (....))の所に
dupを入れているわけです。

普段はほとんど何も考えずに習慣的にこの様なコードを
書いてしまうのですが、なんでこう書くようになったのか
ちょっと自己分析してみると

  1. ある変数の参照しているオブジェクが、他の変数からも
     参照されているかどうかを知ることは一般的にはできない。
  2. 状態が変化した後のオブジェクトを必要としているのは、
     オブジェクトに破壊的な操作を実行している場所だけである。
  3. 変数が参照しているオブジェクを複製して現在の状態を
     抽出し、複製されたオブジェクトに破壊的な操作を加えるのが
     最も確実で安全である。

と考えた結果のようです。
この方針だと、メソッドの操作がオブジェクトに対して
破壊的であるかどうかだけを知っていれば割と機械的に対処できます。
なので(少なくともわたしにとっては)あまり負担ではないです。

はじめからここまで詰めて考えていたわけではないんですけど、
変数の指す先にはオブジェクトがあって、
そのオブジェクトは他の変数からも参照されている可能性があって、
変数からオブジェクトへメソッド(メッセージ?)を送ると
オブジェクトが何らかのリアクションを起こして、
場合によってはオブジェクトの状態が変化するんだ...
といつも漠然と意識していたら、自然とこんな習慣が
身に付いてしまったように思います。

それで荻野さんが問題にされているカプセル化についてですが、
確かにインスタンス変数のオブジェクトが他の外部の変数と
共有されているとカプセル化が壊れるかもしれなくて
心配だというのも分かるんですが、
逆に共有されていることを利点として使いたい場合もあるし、
共有が必要無い場合は(少なくともわたしは)上で説明した方針で
今迄間に合ってきたので、あまり深刻に心配したことは無いです、
わたしの経験上。
# わたしの経験がどこまで一般的に適用できるか、というのは
# これはこれで問題ですけど(汗)

結局

ogino> したがって、ドキュメントをよく読み内部を把握してから使うか、または引数
ogino> に与えるときに複製を与えるなり、または変化させないように name.sub! で
ogino> はなく name = name.sub を使用するなりするべきだということですね。逆に
ogino> 他の人(または一年後の自分)につかってもらうことを想定するライブラリ内に
ogino> おいては dup をする必要は普通はない。それは利用者の責任である、と。こ
ogino> れを Ruby 流と呼ぶ?

こうゆうことなんですが、まあ割と機械的に対処できる(?)ので
使う側にそれほど負担にはならないよ、ということです。

--------------------------------------------------
土岐 仁謙    神戸大学物理高エネ研 M2
http://www.freedom.ne.jp/toki/

In This Thread