たけ(tk)です。

[ruby-list:38273] Re: かみ砕いた説明をすべき範囲 にて 
matz / ruby-lang.org (Yukihiro Matsumoto) さん 曰く:

> |Aの立場であればRuby言語の変数の本質に一番近い比喩で語るのが望ましい。他
……
> |それともう一つの理由は、正確に理解するためには「変数にはオブジェクトのI
> |Dが入っているだけだ。IDは普通はオブジェクトの本体の所在地を示す番地だ」
> |というようにつなげていくしかないだろう。
> |
> |その前ぶれとしては、箱説のほうが説明しやすそうだ、という思惑もありました。

 箱モデル、名札モデル、名前モデルでは、どのモデルを使っても次のようなシュー
ルな場面が出てくる。

(1)ドッペルゲンゲル現象…同一のオブジェクトを指し示す変数が同時に複数
現れる現象。
(2)名札殺人事件現象…モノから名札・名前を取り去って他のモノにつけると、
名札を取られたモノはこの世(スコープ)から抹殺されてしまう現象。
(3)幽霊現象…名札・名前は見えるのにモノが見えない現象。モノが見えない
のに対話したり操作したりできる。

 それに対して、「何番の棚にオブジェクトが置かれているかの情報の容器」
([ruby-list:38250])や「リモコンモデル」([ruby-list:38244] 変数がリモ
コンで、オブジェクトはそのリモコンで操作される物)で喩えると、なんの変哲
もないリアルな話になる。

(1)ドッペルゲンゲル現象…同一のオブジェクトを操作するリモコンが同時に
複数台ある現象。
(2)名札殺人事件現象…リモコンにセットされたオブジェクトIDを消してし
まうとそのモノを操作できなくなる現象。どちらかというと携帯電話の相手先電
話番号を消してしまった場合・他に電話番号にセットしなおしてしまった場合だ
と考えると分かりやすい。
(3)幽霊現象…リモコンで操作するものが壁の向こうにある場合の現象。リモ
コンは手元にあるが、モノは遠くにあって見えない場所にある。これも携帯電話
で考えれば普通の話。

 箱モデル(オブジェクト容器モデル)と名前モデル、名札モデルでシュールな
場面が出てくるのは、それらがどれも「オブジェクトが操作の場所に現物として
存在している」、オブジェクトは、箱や名前の陰にかくれているとしても、操作
の直接の対象になっている、というイメージを伴っているからと思われる。これ
を「現物操作モデル」と呼んでおこう。現物操作モデルを使うかぎりシュールな
場面が現れてきてしまう。

 それに対して、リモコンモデルや矢印モデルなどでは、変数とオブジェクトの
間に距離があり、現物は見えないことが前提となっている。変数を通じて遠くの
オブジェクトを操作する、というイメージであれば現物操作モデルにみられたシュー
ルさは出てこない。これを「遠隔操作モデル」と呼んでおく。遠隔操作モデルの
方がRuby言語の変数の本質に近い比喩ということになるだろう。

 ただし、遠隔操作モデルは、モデル自体が複雑で、説明しにくいという難点が
ある。

 たとえば、次のような簡単なプログラムで「変数」なるものに初めて出会った
初心者に、遠隔操作モデルで変数を説明するのは難しいだろう。

--ruby
a = 3
b = 3
c = a * b
p c   #=> 9
--
--ruby
a = 3
a = a * 3
p a    #=> 9
--

 そもそも、この程度のプログラムでは変数はオブジェクトの入れ物/名札/名
前という機能としてしか使っていない。「オブジェクトを操作する」という概念
自体が出てこない。オブジェクトが近くにあるか遠くにあるかで差が出るような
ものでもないので、「遠隔操作」といっても意味がわからないだろう。

 そうだとすると、この時点では現物操作モデルで説明しておき、のちのち遠隔
操作モデルで説明しなおしていくという手順を踏むことになる。

* もちろん、学生を教室に監禁して、「これを理解しないと単位をあげないよ」
と脅迫したのちに、正確な知識を初めから一時間かけて教える、ということがで
きるのであれば、それの方がよい。

 名前モデルから遠隔操作モデルに説明しなおすとどうなるんでしょう? 「変
数とは遠くのモノを操る霊力を持った名前=言霊=だ」ということになってしま
いそうです。言霊であれば、名前を操ることによってその名前が指し示している
遠くのモノを操ることができます。

 名札モデルを遠隔操作モデルに進化させるには、名札とモノとを結んでいるヒ
モを長くすることになる。しかし、ヒモが長くなると「名札を通してオブジェク
トを操作する」ということが難しくなりそうです。

 箱モデルの場合、箱の中身はオブジェクトそのものではなくオブジェクトを指
し示すIDだ、と言い換えることになる。この言い換えがいんちきだというむき
もあるようです。しかし、もともと箱の中身は直接には見えていなくて、箱のモ
ニターに「中の様子」が映し出されているだけだとすると、テレビの中にアナウ
ンサーが入っていなくても苦情を言う人は少ないのではないか?

 箱モデルで、はじめ現物容器モデルのように説明しても、実はこの箱はテレビ
電話機能付携帯電話(変数が携帯電話、オブジェクトはその携帯電話でつながっ
たモノ、オブジェクトIDは接続先の電話番号)であって、中に入っていたよう
に見えたオブジェクトは、携帯電話で電話をかけた先にあったのだよ、と言い直
しても納得してくれるのではなかろうか?

take_tk = kumagai hidetake