まだ終わらない(苦笑)。
...その名前は<値への名づけ以前>、つまりコードを書いただけの段階でも存在するような気がしますし、...
いや、プログラムは台本のようなものですから、実行時世界には存在しないんです。
登場人物が台本の内容に言及してしまうと、 舞台はスラップスティックになってしまいます。 そういうメタな話は(たまには面白いですけど)やっぱり反則に近いですよね。
「関数のパラメータ」や「一時変数」というのは、あとから 値を利用できるように箱にとっておく、つまり箱モデル そのものと思っており、名前をつけるという感覚がまったく ありません。
いや、まあ、人の持つイメージは想像以上に多様だということでしょう。 私の数学のイメージは「紙と鉛筆」です。 途中結果は紙に書きなぐられた数または式です。 これが他のなにかとごっちゃにならないように名前をつけておく、 というのが私の「数学の変数」に対するイメージですね。 たとえば z = x + y を考える時、私は「xとyという箱から値を取り出して、両者を足した値をzという箱に入れる」ではなく、 「x + yという式にzという名前をつける、今後zを見たらx + yのことだと思う」とします。lazyですね。
余談ですが、私の数学科の友人の恩師は「数学者には紙と鉛筆があれば良い」と言って、 コンピュータに否定的だったそうです。間違えないから消しゴムは要らないんですって。
kwatchさんが「箱」をイメージされるということは、 紙と鉛筆よりももっと新しいデバイスのイメージを持っておられるのでしょう。
というか、もうこうなったら初心者相手に実験するしか ないですね。
- 名札モデル
- 箱モデル
- IDを入れた箱モデル
初心者の選び方で全然違う結果が出そう。
C++について学ぶなら「箱+名札モデル」が良いと思います。 ポインタについて学ぶ時には「IDを入れた箱(+名札)モデル」ね。
しかし、今はRubyの話ですから、そんなもってまわった話をしなくても、 名札モデルで十分だと思います。
個人的にはRubyでlet x 100のような記法があれば 名札モデルの説明でしっくりくるのですが。 これなら、代入でなく命名、変数ではなくて名前 という用語で説明しやすい
えーと、なにか私の主張を誤解しておられるかもしれません。 私は「(Rubyにおける)変数とは結局は名前に過ぎない」と申しております。 ですから、「代入は命名、変数は名前」です。
ところで、Rubyって、複数の変数が同一の実体を指すこと無いのですか。参照渡しなんかも含めて。 複数の変数が同一の実体を指すことができると、それはそれで便利ですが、 Rubyではそうできなくなっている理由は何なのでしょう?
もちろんあります。ないのはC++のリファレンスに相当する「複数の名前で同じ変数を指すこと」です。
C++と比較するとRubyは一段少ないんです。
C++: 名前->箱->オブジェクト Ruby: 名前->オブジェクト
背景となる(言語が見せようとしている)モデルが違うんで、 同じモデルを使うことは良くないかも、というのが今回の話のもとなのです。
「名札」で違和感があるのは,「ary = Array.new」は「ある配列オブジェクトにaryという名前をつけた」ということですが,この「名前のないモノに名前をつける」ということが,あんまり日常では起きないからではないかとも思います。子供に名前をつけるときぐらい?
いや、プログラマの日常にはよくあるんじゃないですかね。
名前をつけることはもうすでに日常なのです。(笑)