[SML 7526] Re: Cincom Smalltalk Daily: 11/1/06に関して

濱崎治 osamu.hamasaki @ gmail.com
2009年 5月 1日 (金) 23:16:16 JST


濱崎です。
杉谷さんのメールを読むまで、こんなのがあるのを知りませんでした。
ありがとうございます。

で、問題のスクリーンキャストを見てみました。

実際に操作しながら「撮影」されたもので、そのようなことが起りうるのか不思議です。


編集されたビデオのようですから、映し出されたコードと、実際に動作している時点での
コードは違っていたのかもしれませんね。

あと、動作し始めてから
> initialize
>
> self queryExecutor: QueryExecutor new
>> self queryExecutor: QueryExecutor
> に替えてみましたが、どちらも動作しました。これは本来どう書くべきなのでしょうか?


以下の理由により、どちらでも動作するようです。
 1.QueryExecutor class>>executeQueryが

^self new executeQuery: aQuery

と書かれており、QueryExecutorのインスタンスもクラスも、どちらも同じメッセージに
同じように応答できる。

2.QueryExecutorの4つのインスタンス変数のうち、query,result,connectionは、#executeQuery:の
中(およびそこから呼び出されるメソッドの中)で、参照される前に何らかの値がセットされる。
また、インスタンス変数connectionClassは#initializeで初期化された後、書き換えられる事がない。
したがって、QueryExecutor>>executeQuery:(インスタンスの方のメソッド)が再使用可能に
なっている。(ビデオには映っていませんが、QueryExecutor class>>newが自動生成されていて、

^super new initialize

と書かれていると思います。)

「本来どう書くべきか」はよく分かりません。
でも、今後の展開(コネクションを維持したまま複数のクエリを実行するように拡張する、など)を
考えると、

self queryExecutor: QueryExecutor new

としておく方が良いように私は思います。

ただ、QueryExecutor class>>executeQuery:をわざわざ書いたところをみると、James Robertsonさんは、
EmployeeUI>>initializeを

self queryExecutor: QueryExecutor

と書いた可能性もあります。(でも、QueryExecutor class>>executeQuery:を実際に実行しているのは
一本前のビデオですからねえ。。。)

以上です。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://www.smalltalk.jp/pipermail/sml/attachments/20090501/b07f591e/attachment.htm


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