From: matz@... (Yukihiro Matsumoto) Date: 2003-09-01T01:34:03+09:00 Subject: [ruby-list:38315] Re: 箱モデルの有害性 まつもと ゆきひろです In message "[ruby-list:38312] 箱モデルの有害性" on 03/09/01, Take_tk writes: |> 堀川 久 さん 曰く: |> > よくあるオブジェクト指向言語で、変数を箱と捉えると、理解の妨げになるだ |> > けで、まったく有害です。 |> |> どういう弊害があるのですか? | |有害なモデルというのは気になります。詳しく説明していただけませんか? 私は堀川さんではありませんが。 まず最初に思いついた「有害性」は、変数とオブジェクトの混同を 招きそうということです。CやC++では実際に変数も箱ですし、オブ ジェクトも箱で、変数のアドレスを取ればそれはすなわちオブジェ クトなのですが、Rubyでは明らかに別物です。言語が背景としてい るモデルが違う以上、説明に使うモデルも違う方が良いように思い ます。 次に思いついたのが、「値」という言葉の意味が不明瞭になりそう という点です。 箱モデルっていうのは空っぽの入れ物があってそこに「値」が入る モデルですよね。たとえば構造体だと変数の場所には各メンバのた めの場所が用意されていて、そこに値が入ることになるわけです。 このモデルでは「値」というのは「中身」です。つまり"foo"とい う文字列なら「fooという文字の並び」です。変数は箱だというこ とはそういうことを意味します。一方、Rubyでは一般に「値」とい えばアイデンティティを指します。オブジェクトIDと言ってもいい かもしれません。ある文字列の内容が破壊的メソッドによって更新 されても、それは値が変わったのではなく、内容が変わったのです。 実はのところ私は、たけさんの本をまだ読んでいないのですが(※)、 ruby-listでのメールのやりとりを読む限り、値という単語に対す る混同は実際に起きているようで、箱モデルの有害性は単なる杞憂 ではすまないのかもしれません。 たとえ話はしょせんたとえ話ですから、トレードオフで判断すれば よいのですが、Rubyの解説で箱モデルを採用するメリット(もしあ れば。私はまだ十分に理解していないのですが)と上記のデメリッ トを比較して選択することになると思います。 ---------- さて、とはいえ、Webページと違って、実際に書いてしまった本の 内容を更新するわけにはいかないので、たけさんの著作については これで良いとして、今後別の機会にRubyの変数について解説する機 会があったとしたら、どのように説明する方が良いのか、という話 をしたいのです。 箱モデルで名札モデルの代わりになることに疑問を持つ人はいない と思います。結局(実装では)ポインタで表現されているのですし。 しかし、そのメリットは私にはよくわかんないです。 「実は箱モデルにはこういうメリットがある」とか「こういう前提 条件なら箱モデルの方が良い」とか「箱モデルより、名札モデルよ り、こんなモデルの方が良い」とかあれば聞いてみたいです。 まつもと ゆきひろ /:|) ※ 最近、本が出ても私には献本がないんです。さみしい。