«前の日記(2003年09月02日) 最新 次の日記(2003年09月04日)» 編集

Matzにっき


2003年09月03日 [長年日記]

_ [OOP]箱モデルの再逆襲

まだ終わらない(苦笑)。

碁盤縞さんのツッコミ

...その名前は<値への名づけ以前>、つまりコードを書いただけの段階でも存在するような気がしますし、...

いや、プログラムは台本のようなものですから、実行時世界には存在しないんです。

登場人物が台本の内容に言及してしまうと、 舞台はスラップスティックになってしまいます。 そういうメタな話は(たまには面白いですけど)やっぱり反則に近いですよね。

kwatchさんのツッコミ

「関数のパラメータ」や「一時変数」というのは、あとから 値を利用できるように箱にとっておく、つまり箱モデル そのものと思っており、名前をつけるという感覚がまったく ありません。

いや、まあ、人の持つイメージは想像以上に多様だということでしょう。 私の数学のイメージは「紙と鉛筆」です。 途中結果は紙に書きなぐられた数または式です。 これが他のなにかとごっちゃにならないように名前をつけておく、 というのが私の「数学の変数」に対するイメージですね。 たとえば z = x + y を考える時、私は「xとyという箱から値を取り出して、両者を足した値をzという箱に入れる」ではなく、 「x + yという式にzという名前をつける、今後zを見たらx + yのことだと思う」とします。lazyですね。

余談ですが、私の数学科の友人の恩師は「数学者には紙と鉛筆があれば良い」と言って、 コンピュータに否定的だったそうです。間違えないから消しゴムは要らないんですって。

kwatchさんが「箱」をイメージされるということは、 紙と鉛筆よりももっと新しいデバイスのイメージを持っておられるのでしょう。

というか、もうこうなったら初心者相手に実験するしか ないですね。
  1. 名札モデル
  2. 箱モデル
  3. IDを入れた箱モデル

初心者の選び方で全然違う結果が出そう。

C++について学ぶなら「箱+名札モデル」が良いと思います。 ポインタについて学ぶ時には「IDを入れた箱(+名札)モデル」ね。

しかし、今はRubyの話ですから、そんなもってまわった話をしなくても、 名札モデルで十分だと思います。

個人的にはRubyでlet x 100のような記法があれば 名札モデルの説明でしっくりくるのですが。 これなら、代入でなく命名、変数ではなくて名前 という用語で説明しやすい

えーと、なにか私の主張を誤解しておられるかもしれません。 私は「(Rubyにおける)変数とは結局は名前に過ぎない」と申しております。 ですから、「代入は命名、変数は名前」です。

harukiさんのツッコミ

ところで、Rubyって、複数の変数が同一の実体を指すこと無いのですか。参照渡しなんかも含めて。 複数の変数が同一の実体を指すことができると、それはそれで便利ですが、 Rubyではそうできなくなっている理由は何なのでしょう?

もちろんあります。ないのはC++のリファレンスに相当する「複数の名前で同じ変数を指すこと」です。

C++と比較するとRubyは一段少ないんです。

C++:  名前->箱->オブジェクト
Ruby: 名前->オブジェクト

背景となる(言語が見せようとしている)モデルが違うんで、 同じモデルを使うことは良くないかも、というのが今回の話のもとなのです。

ま2さんのツッコミ

「名札」で違和感があるのは,「ary = Array.new」は「ある配列オブジェクトにaryという名前をつけた」ということですが,この「名前のないモノに名前をつける」ということが,あんまり日常では起きないからではないかとも思います。子供に名前をつけるときぐらい?

いや、プログラマの日常にはよくあるんじゃないですかね。

  • プロジェクトに名前をつけたり
  • プログラムに名前をつけたり
  • モジュールに名前をつけたり
  • クラスに名前をつけたり
  • メソッド/関数に名前をつけたり
  • 変数に名前をつけたり

名前をつけることはもうすでに日常なのです。(笑)

_ [生活]洗車

天気はいいし、車の汚れが目立っていたので洗車した。

1時間後、雨が降ってきた。

もうイヤ、こんなマンガみたいな生活。


«前の日記(2003年09月02日) 最新 次の日記(2003年09月04日)» 編集