作者: ねこ丸
日時: 2006/7/6(18:53)
  ねこ丸です。

  一点だけのつもりが長くなってしまいました。

閑舎 writes:

> Zazel <zazel.ts@...> さん wrote.

> > インスタンス内に閉じ込めることはかなり重要です。同じクラスの
> > インスタンスである$obj1と$obj2があったとして、$obj1->func() と
> > $obj2->func() が同時/並行に動けるようになります。というか
> > 分離しないと腐ります。
>
> $obj->last, $obj->next, $obj->parent のようなツリー構造を作る側がきちん
> と把握しておけば何とかなるとは思いますけどね(というかそれでもう作った)。

  意味が違うような。
  今回の場合は

- totext() が呼び出されたときに、$line の中身が意図したものかどうかを
  確認する術がない
- 複数のテキストを解析させたい場合、いちいち $line の中身を気にして順
  序立てて呼んであげないといけない

  辺りが嬉しくないんですよね。$obj1->parse(), $obj2->parse(),
$obj1->totext(), $obj2->totext() とは呼ぶことができません。だったら
別々に呼べない方が安全で嬉しいです。

  自分がクラスを作るときにいちばん考えるのは、すっぱり中身を忘れてしまっ
た「明日の自分」がこれを「利用するときにどうなっていると嬉しいか」です。
面倒な制限や順序などのルールはない方が嬉しいに決まっているから、できる
だけそういうことを気にしないで使えるように作っていきます。ましてグロー
バル変数はスクリプトを全部検索しないとどこでいじっているのか分かりませ
ん。閑舎さんの作りだと構造、構成についてちゃんとドキュメントがないと
「明日の自分」は確実にぶっ壊します(^^;

  インスタンス内にテキストを持たせてあれば自分の意図しない文字列かどう
かは気にする必要がないし、変換のタイミングも出力のタイミングも自由自在
です。で、Zazel さんというか僕が使った解析器という言葉はもとの変換器と
いう言葉とすでに食い違っているのでおかしな話になってますが、Zazel さん
の書いた例は僕の意図とまったく同じです。Hoge を Kaisekiki にすると分か
りやすいかなってくらい。


  余談ですが、僕があえて解析器という言葉を使ったのは解析と変換のタイミ
ングを任意に設定したい場合があるからです。具体的に Wiki で言えば、

- ソースからテキストの構造を解析
- 解析結果をもとに HTML に変換

  を別々に実行するということですが、これができると何が嬉しいかというと、

- 解析結果をキャッシュとして利用できる

  わけです。変換結果の HTML をキャッシュするのももちろんありですが、そ
うすると例えばリンク先のページの有無など、状態によって変化するものを反
映させることができなくなります。だから解析結果をキャッシュしたい。

# もちろんその場合はリンク情報はテキストとは別なオブジェクトにする必要
# がありますが、その話は割愛。

  そういう意味を込めて解析器という言葉を使いました。

--
    ねこ丸