このビデオでは インスペクタと
その使い方を示します。
インスペクタとは何でしょうか？
インスペクタはシステムのオブジェクトと
対話するためのツールです。
Pharo では全てのことが オブジェクトによって書かれていて
Pharoを構成する全てのオブジェクトを インスペクタで見ることができます。
インスペクタとは何かを 比喩で説明すると
インスペクタは顕微鏡です。 ただ、その顕微鏡は
観察する対象であるオブジェクトと
対話できる顕微鏡です。 あたかも生物学者が
細胞やバクテリアを研究するように
あなたも針の先で生きたバクテリアと
対話できるようなものです。
ちょっとした表現式を用意してあります。
実際には、日付や時刻や 「Morph」を1つの辞書に入れることは
あまりないでしょう。
しかし、これはあくまで 練習目的ということで。
これを見てください。
表現式を入力して 最初にすることは
インスペクタに乗せることです。 これでインスペクタを使えます。
見ての通り、 インスペクタは多態的なオブジェクトです。
インスペクタは何を表示しているでしょう？
ここには、オブジェクトの集まり(Collection) の要素がいくつか表示されています。 several elements in my
要素の上でクリックする度に
別のインスペクタが開いて
選択された要素を表示します。
いいですか、GTインスペクタは
Pharo の新型のインスペクタで
ベルン大学の GT チームが 開発しました。
GTインスペクタは
見る対象とする個々の オブジェクトに応じて
それぞれに適切な表示の仕方をします。
辞書をインスペクタで開いた時には
グラフィカルな要素を操作するのとは 同じ方法で表示されるべきではありません。
興味深い点はこれです。 これらの要素のそれぞれが
別の表示のビューを ユーザーに提供するのです。
一番基本的なビューは 生(Raw)ビューと呼ばれるものです。
このビューは実装を表示します。
例えば、OrderedDictionary を インスペクタで開くと
この OrderedDictionary クラスには
2つのインスタンス変数があります。 dictionary と orderedKeys です。
インスペクタは これらのインスタンス変数の
生の値を表示します。
辞書をクリックすると それが辞書だとわかります。
この辞書をクリックしたら ほら、ここにあるように、これは辞書です。
そして開いた先では 同様にこのオブジェクトの生のビューが見えます。
orderedKeysは 見ての通り配列です。
この配列には 時刻、日付、そしてMorphが格納されています。
Items モードにすると
この OrderedDictionaryの要素を
キーと値として見せてくれます。 このほうがわかりやすいです。
これを見れば そのオブジェクトの中身に入っていって
その感触を得ることができます。
さあどうしましょう。 これは何でしょう。
ああ、これは6番目に格納されていて
時刻と関連つけられていて キーと値があって、などなど
インスペクタでブラウズしていく ことができます。
この小さなブラウジング・バーで
小さな○印にカーソルを置いて
プレビューすることができます。 クリックすれば、そこに移動します。
また、ウィンドウのサイズや
フォーカスを変えることができます。
例えば3つ選択して サイズを大きくすれば
ほら、見易くなります。
Itemsモードでは
対話できるのでこのほうが良いです。
ここで、日付のキーと値がありますね。 たとえば
選択すれば日付が見えます。 この場合、インスタンス変数が見える
生(raw)の表示です。
「self browse」としたらどうなるか だいたい想像できるでしょう。
Timespan(時間帯)、Date（日付)を ブラウズできます。
なので start(開始)とduration(期間)があります。
確かに startとdurationがありますね。
Details(詳細)タブを見れば
日付には
year(年)、month(月)などがあり
例えばISO形式で見ることができます。
どんな仕組みになっているのでしょう？
それは別のビデオで紹介します。 ただ、それぞれのオブジェクトが
インスペクタでどんな面を見せるのかを
決めています。
例えば、カレンダーがあります。
日付のグラフィカルな表示もできるのです。
戻ります。
同じように、時刻についても 同様のものを見ることができます。
生(raw)タブはもうお見せしました。
Metaタブというものもあります。
これは小さなコードブラウザで メソッドを表示することができます。
例えばこうやってメソッドを見ることができます。
日付や時刻と対話をしたい場合に
どんなメッセージを送ることができるか わからないという状況を想像してみましょう。
もしかしたら、「hours」を 送ることができるかもしれません。
18が返ってきました。18時です。
「hour」を探しているのであれば 普通はここにあるかどうかでわかります。
メソッドの定義を見ることができます。
インスペクタのフローについては まだまだあります。
Morphを見てみましょう。
Morphはもっと複雑なオブジェクトです。
色々な側面があります。
何が良いかというと 例えば
Morphをクリックしたら その描画を見ることができます。
ここで描画を見せているのは
HSVAColorSelectorMorphというMorphです。
このオブジェクトと対話できるということを
お見せしましょう。
このMorphにopenInWorldで 開くように言うことができます。
また、対話することができます。
その対話は オブジェクトがどのような機能を
提供するかによります。
selectedColorすることができます。 ちゃんと動きます。
「self selectedColor」すれば
色が返ってきます。
面白いことに
インスペクタの中でprintさせれば
テキスト形式で表示されます。
inspectすれば
インスペクタが開きます。
それが今ここで私がやっている操作です。
この表現式の結果を
インスペクタのフローの中に 入れたいのであれば
どうすればいいでしょう？
「Do it and go」をします。
「Do it and go」をすると 対話のフローの中に
新しいオブジェクトと そのインスペクタを追加します。
おわかりでしょうか。 ここに色のコードがあります。
別に特別なことではありません。
戻ります。
ここで興味深いのは
オブジェクトのビューがあります。 Submorph(Morphの部品)です。
同じビューが必要で
このグラフィカルなオブジェクトを構成する 部品を探したい時には
Rawモードでは グラフィカルな部品のツリー構造の
内部を辿っていかなければなりません。
それは本当に面倒なことです。
そこでいい小技をお教えしましょう。
Morphのツリーがあったとして
同じオブジェクトの同じビューが2つ あったとします。
ここで「Submorph」することができます。
こちらをSubmorphにして もう一方はMorphにします。
ツリーの要素を選択すると
「あちら側ではこれだけを表示してくれ」
という意味になり
選択されたものと対応する部品が 表示されるようになります。
この小技はけっこう強力で 小さなインジケーターに対応する
部品を探さなければならないことが よくあります。
この技を使えばけっこう簡単になります。 ほら、これです。
しかし、昔からあるモードでは
そう簡単には見つかりません。
実際、いい方法が見つかりません。
とりあえずツリーの中を探し回って
見つけることになります。
なぜかというと
単純なオブジェクトだからです。
別のビデオでお見せしますが
この種の操作は システムのどのオブジェクトにも使えます。
そのビデオではこの操作を
ファイルシステムやクラス自体に 行います。
まとめると
インスペクタは
生きたオブジェクトに話しかけ対話し そして変更するためのオブジェクトです。
それぞれのオブジェクトは
それぞれに異なる側面やビューを持っていて
シナリオに応じて
それぞれの対話をします。
とても強力なオブジェクトです。
実際に、GTインスペクタは 本当に素晴らしいツールなのです。