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