« 連載: Smalltalk use: better《8》基本要素の意義:リテラルとは★ | トップページ | 連載: Smalltalk use: better《10》基本要素の意義:式とは★ »

2006年5月18日 (木)

連載: Smalltalk use: better《9》基本要素の意義:変数とは★

キーワード ◆ Smap・テレパシー・ドラえもん・阿吽の呼吸・以心伝心・会話・固有名詞・四次元ポケット・指示代名詞・主語・変数・目的語

※ PDF でご覧になるなら ⇒ 「piyo60518.pdf」をダウンロード

------------ 序 ------------

すべては、以前だれかが考えたことがある。
難しいのは、それを思い出すことだ。

Goethe, Johann Wolfgang von (1749-1832)

◆ 年齢を重ねると、固有名詞がなかなか出て来なくなるという話を聞きます。「これ、それ、あれ」など、指示代名詞が多くなるという話も聞きます。先日、親友と話をする様を端で見ていた人が「よく話が通じますね」という感想を漏らしました。つまり、主語や目的語もなしに、テレパシーで会話をしているかのような奇異な感じがしたというのです。残念ながら、親友も私も、超能力や霊能力は持っていません。しかし、何を話したいのかは、阿吽の呼吸なのでしょう。以心伝心は、理屈ではうまく説明できそうにありません。

◆ 以心伝心をソフトウェア開発に導入する方法論が見つかるまでは、開発チームで主語や目的語を明確にしておく必要があります。そのとき役立つのが変数です。しかし、使い方を誤ると混乱のもととなります。

------------ 本文 ------------

変数とは ◆ プログラミング言語の違いはあっても、これらの多くに共通して存在するのが変数です。Smalltalk では、変数を宣言するときに、型を指定する必要はありません。変数には、任意のオブジェクトを代入できます。例えるなら、Smalltalk における変数は、固定長のセルではなく、何でも取り出せるドラえもんの次元ポケットのような存在なのです。

3 class          "SmallInteger"

◆ このメッセージ式は、すでに何度も登場しています。オブジェクト 3 にメッセージ class を送ると、SmallInteger が得られます。ところで、SmallInteger の正体は何でしょうか。メッセージ class は、その名前から分るように、クラスを得るために使います。よって、SmallInteger がクラスであるのは確かです。ここで問題にしたいのは、識別子 SmallInteger が表すモノの体は何かということです。「オブジェクトにメッセージを送ると、オブジェクトが得られる」のが原則です。これに従うと、メッセージ class を送ると、SmallInteger が得られる。ゆえに SmallInteger はオブジェクトである。これは、キリスト生誕の前から存在する、三段論法を適用しなくても明らかです。SmallInteger がオブジェクトである証拠に、変数に代入したり、メッセージを送ったりできます。メッセージ(セレクター)やアルゴリズム(ブロック)さえ、変数に代入できるのですから、クラスを代入できることに、驚きはないでしょう。

| class |
class := SmallInteger.
class printString          "'SmallInteger'"

◆ 変数 class に、クラス SmallInteger を代入します。メッセージ式 class printString を評価すると、変数 class が束縛するクラス SmallInteger にメッセージ printString が送られ、文字列オブジェクト 'SmallInteger' が得られます。よって、クラス SmallInteger の正体は、メッセージを受信できる、オブジェクトと見なして間違いないようです。

◆ しかし、ここで問題としているのは、クラスオブジェクトを表す、SmallInteger という識別子の体です。もしかすると、これはリテラルなのでしょうか。リテラルなら、変数に代入したり、これにメッセージを送ったりできます。なにより、リテラルというのは、オブジェクトを表現する本質的な手段のひとつです。しかし、残念ながら、SmallInteger は、リテラルではありません。では、その正体は何でしょうか。

60518a_3 ◆ 結論から先に言うと、SmallInteger という識別子の正体は、変数です。SmallInteger が変数名なら、それが参照するのは、クラスの体そのものです。つまり、変数 SmallInteger は、クラスオブジェクトを参照するために用意されたものなのです。これは、リテラル表記を持たないクラスオブジェクトを参照するために、変数が必要とされることを意味します。

◆ SmallInteger の正体は、単なる変数であることが分りました。それなら、この変数に、何か適当なものを代入できるはずです。ただし、これはあまりオススメできません。どうしても…という受講者は、自己責任のもとで、お試しください。

SmallInteger := ???

【Tips】Smap の概要
60518b_6 ◆ この連載で登場する Smap の概要を示します。これによって、メッセージ式を評価したときに得られる、オブジェクト間の相互作用が明らかになります。

 ==================================
真樹育未 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部

|

« 連載: Smalltalk use: better《8》基本要素の意義:リテラルとは★ | トップページ | 連載: Smalltalk use: better《10》基本要素の意義:式とは★ »

Squeak/Smalltalk」カテゴリの記事

.連載: Smalltalk use: better」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 連載: Smalltalk use: better《9》基本要素の意義:変数とは★:

« 連載: Smalltalk use: better《8》基本要素の意義:リテラルとは★ | トップページ | 連載: Smalltalk use: better《10》基本要素の意義:式とは★ »