Smalltalk use: better; episode: #001d ”メタプログラミングへの道”

前の記事記事一覧次の記事
Smalltalk use: better;



episode: 001

メタプログラミングへの道



目標に向かって一段ずつ階段を上っていく上で
いちばん肝心なことは
必ず最初の一段を上るということである
そしてまた次に一段上るということである
Hideo Itokawa - Wikipedia

□ クラスメソッドを定義する
Person2 class compile: '
new
	"Person2 new inspect"
	^super new initialize
' classified: #'instance creation'

クラスメソッドを定義するときに、メッセージを受信するのは、クラス Person2 ではなく、メタクラス Person2 class です。つまり、メタクラスオブジェクトに対して「あなたのクラスメソッドを定義したい」というメッセージを伝えます。というのも、クラスは「メタクラスインスタンス」と見なせるからです。真のオブジェクト指向プログラミングの世界では、クラスも一人前のオブジェクトです。

compile: の引数に指定するコードの断片には、二重引用符で囲まれたコメント "Person2 new inspect" が含まれます。また、classified: の引数に指定するプロトコルの名前には空白文字が含まれるので、これを単一引用符 #'instance creation' で囲みます。

コメントの中にあるコードの断片 Person2 new inspect を実行すると、生成したインスタンスを調査するたの、インスペクターが現れます。

リスト項目 self を選択すると、それが Person2 のインスタンスであることを示す a Person2 が表示されます。リスト項目 name を選択すると、その値が未定義であることを示す nil が表示されます。

タブ項目[メソッド]を選択すると、プロトコル accessing に定めたメソッド name および name: や、クラス定義を意味するコードの断片を確認できます。

このように、プログラマー(利用者)がクラスやメソッドを定義する作業そのものを、プログラムとして(コードの断片で)表現できます。つまり、プログラミング(作譜)を再現するためのプログラム(算譜)を作成できます。

 ↑ TOP

*Created: 1989/01/29|Last updated: 2013/04/02 20:00:06