[SML 7204] Re: メソッド名について

AOKI Atsushi aoki @ sra.co.jp
2006年 10月 5日 (木) 15:43:20 JST


青木です。

少々込み入ったプログラミングをしていましたので、返信が遅くな
りました。「Smalltalk イディオム」の第4章「制御」の「分岐」
や「繰返し」のところのプログラムですが、VisualWorks 7.4.1 に
おいて以下のようになります。

------------------------------------------------------------
【複数のメッセージセレクタを一気にブラウザにかける】--------

| messageSelectors browserNavigator browserEnvironment selectorEnvironment |
messageSelectors := #(#ifTrue: #ifFalse: #ifTrue:ifFalse: #and: #or:).
browserNavigator := Refactory.Browser.BrowserNavigator new.
browserEnvironment := Refactory.Browser.BrowserEnvironment new.
selectorEnvironment := Refactory.Browser.SelectorEnvironment new.
messageSelectors do:
        [:aSelector |
        (browserEnvironment implementorsOf: aSelector)
            classesDo: [:aClass | selectorEnvironment addClass: aClass selector: aSelector]].
browserNavigator browseEnvironment: selectorEnvironment

------------------------------------------------------------
【複数のメッセージプロトコルを一気にブラウザにかける】------

| messageProtocols browserNavigator selectorEnvironment |
messageProtocols := #(#enumerating #controlling).
browserNavigator := Refactory.Browser.BrowserNavigator new.
selectorEnvironment := Refactory.Browser.SelectorEnvironment new.
SystemUtils allBehaviorsDo:
        [:aClass |
        (aClass organization listAtCategoriesNamed: messageProtocols)
            do: [:aSelector | selectorEnvironment addClass: aClass selector: aSelector]].
browserNavigator browseEnvironment: selectorEnvironment

------------------------------------------------------------

寺内さんが新たなクラスを作ってまで保持しようとするほどのこと
ではないと思いますよ。大切なのは上記のプログラムを諳(そら)
んじるまで唱(とな)えることです。

すると、ブラウザ・ナビゲータ(リファクタリング・ブラウザ)や
メッセージのセレクタ環境などの開発環境がわかるようになります。
なぁ〜んだ、グローバル環境を巡って、セレクタ環境に貯め込んで、
その環境をブラウザ・ナビゲータに開示させればいいのかぁ、とね。

読書百遍而義自見(どくしょ・ひゃっぺん・して・ぎ・おのずから・
あらわる)です。その域に達すると、いつでも上記ようなプログラ
ムを書き下ろせます。メソッド名(メッセージ名)の迷いも消え失
せます。諳んじるまで唱えてくださいまし。

------------------------------------------------------------
R2D2 (AOKI Atsushi)        http://www.sra.co.jp/people/aoki/




SML メーリングリストの案内