[mie-dev:00024] Re: 結合則リファクタリング

Back to archive index

池田優一 eclip****@cspc*****
2005年 11月 24日 (木) 23:19:00 JST


池田です。

インライン★でコメントします。

Jumpei Arakawa wrote:
> 荒川です。
> 
> 結合則のリファクタリング案を示します。
> 
> 骨子:
>     1. 要素部と挙動部の結合に関しての違いをほぼなくす
>     2. フィルタという概念を追加する
>     (3. 結果的に抽出則はなくなる)
> 
> 1. 要素部と挙動部の結合に関しての違いをほぼなくす
> 
> 現在、結合に際して要素部と挙動部のルールが異なりますが、
> 挙動部の結合ルールを要素部のそれに合わせます。
> つまり、後ろから結合するものが優先され、かつ追加するということです。
> 
> { A | x, y, z | x + y + z } <+ { B | a, b, c | a + b + c }
> => { B | x, y, z, a, b, c | x + y + z; a + b + c }
> 

★不都合が見つからなければ良いと思います。
ただ、オブジェクトをオーバーライドする場合には不自然に感じるかもしれませ
んね。下のフィルタと組み合わせればいけるかな。

> 唯一の例外は、束縛に関しての穴埋めルールのようなものが存在しないことです。
> また、以前あった内部名が共通の場合云々の話は特別扱いではなくて、
> 内部名が同じなら自然と同じように見えるというだけのことになります。
> 
> 当然ですが、nil(空の状態)の挙動部を重ねたとしても影響はありません。
> 
> { A | x, y | x + y } <+ [ 1, 2 ]
> => { A | x = 1, y = 2 | x + y }
> 
> これに関連して便利な識別子itを考えました(itという名称は仮称)。
> itは、事前の評価結果を束縛結果としてもつ識別子です。したがって、
> 
> { do-something } <+ { print: it }
> => { do-something; print: it}
> 
> 等で簡単に表示処理等を埋め込むことが可能になります。
> (まあ、このこと自体は以前のルールでも可能でしたが)
> 
> 2. フィルタという概念を追加する
> 
> このフィルタという概念はメタ結合の最初からのイメージである
> 「重ねる」というものから自然に発想したものです。
> (以下の表記はまだ仮のものです。問題があれば変えましょう)
> 

★表記についてはわかりにくいような・・・w
前知識なしで読み取れば同じ空オブジェクトになりそうだし。
まぁ記号不足なので難しいですが。要検討。

> { | | }
> 
> これは、内部名、要素部、挙動部を全て透過させるフィルタです。
> 
> { || }
> 
> これは、内部名と挙動部は通しますが、要素部を通さないフィルタです。
> 
> { | |}
> 
> これは、内部名と要素部は通しますが、挙動部は通さないフィルタです。
> 
> {| | }
> 
> これは、要素部と挙動部は通しますが、内部名は通さないフィルタです。
> 
> {||}
> 
> これは、内部名、要素部、挙動部のいずれも通さないフィルタです。
> 
> 冗長なので全てを列挙はしませんが、要するにスペースのふさがった記述で「非透過」を示します。
> 例えば、
> 
> { A | x, y | x + y } <+ { || }
> => { A | | x + y }
> 
> となり、フィルタがかかったことで、要素部が通れなくなり、重ねたときに上から見えなくなりました。

★削ぐわけではなくて隠すんですよね。Rubyのundefと似てます。
フィルタと呼ぶとちょっと語弊があるかもしれない。
マスクとか、カバーとか、シールドとか?

> これを使うことで、前回のメールでいった「強い」オブジェクトを作ることができます。すなわち、
> 
> .a = { | |} <+ { aを取り出す処理 }
> { A | a = 1 | do-something } .a
> => { A | a = 1 | do-something } <+ ({ | |} <+ { aを取り出す処理 }) !
> => { A | a = 1 | aを取り出す処理 } !
> => 1
> 
> となります。これは対象オブジェクトとaを取り出す処理を持つオブジェクトの
> 間にフィルタが入ることで、do-somethingを見えなくしたからです。

★うん、やっぱりこれだとわかりにくいから目立つ記号を入れたい気分。
フィルタていう概念はオブジェクトに新しい性質が加わったということになりま
すよね。普通のオブジェクトは{ | | }というフィルタを性質として持っている
と。んでフィルタはメタ結合時に必ず左側が引き継がれるということでしょう
か。便利そうだけど、漠然とした不安が無きにしも非ずというのが正直な感想w

表記の一案としては、
{ | | } → [___]
{||}    →  [///]
とか。見た目重視で。

んでフィルタ自体もフィルタ対象とできたりするとどうなるんだろうとか・・・w


> 強いオブジェクトというのは我ながらちょっと無理やりな気がしたのですが、
> 重ねるというイメージからいってフィルタがあるというのは個人的にしっくりきました。どうでしょう?

★強いオブジェクトというのは私もちょっと微妙だと思ってました。
レスしてなくてすみません。ちょいパワー不足で。

> _______________________________________________
> mie-dev mailing list
> mie-d****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/mie-dev
> 
> 



mie-dev メーリングリストの案内
Back to archive index