







第10回
■
■SqueakではじめるSmalltalk入門 第10回
■
本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回は、システムブラウザを起動して、注目するクラスをブラウズするところまで行ないます。
システムブラウザの起動のしかたには、大きく分けて2つの方法があります。ブラウズしたいクラスの名がすでに明らかなときは、適当な場所にクラス名をタイプして入力し、選択(あるいは、classなどのメッセージによりブラウズしたいクラスを得る式をprint it (cmd+P))してからbrowse it (cmd+B)します。すると、指定したクラスを選択した状態(ブラウズできる状態)で、システムブラウザが起動します。
ためしに、文字列「'squeak'」のクラスがなんであるかが分からない状態で、そのクラスをブラウズしたい局面を想定し、その手順を示してみましょう。まず、興味の対象となるオブジェクトに対して「class」というメッセージを送信し、そのクラスを得ます。評価にはdo itではなく、評価の結果(返値)が式の直後に挿入されるprint itを用います。
[fig.A]'string' classのprint it

print itは黄ボタンのクリック(ワンボタンマウスならoption-クリック、2ボタンなら右ボタンクリック、ホイールを含めた3ボタンなら中ボタンクリック)で現われるメニュー「黄ボタンメニュー」の項目にも見つけることができます。
[fig.B]黄ボタンメニューを使ってprint it

黄ボタンメニューの呼び出しには、アクティブな(文字列を現在、編集中の)ペインのスクロールバーの上にある「黄ボタンメニューボタン」を使うことも可能です。この方法は、ワンボタンマウスやタブレットなどを使用しているときに特に便利です。
[fig.C]スクロールバーの上にある黄ボタンメニューボタン

こうして'squeak'のクラスがStringだと分かったところで、改めて、Stringが選択状態にあることを確認し、browse it (cmd+B)します。browse itは、黄ボタンメニューにはありませんが、「シフト黄ボタンメニュー」と呼ばれる黄ボタンメニューの“裏”メニューに見つけることができます。シフト黄ボタンメニューを呼び出すには、黄ボタンメニューを呼び出すアクションの際にキーボードのshiftキーを押しておくか、いったん黄ボタンメニューをポップアップさせ、そこでmore...項目を選択します。…が、面倒なのでbrowse itにはcmd+Bというキーボードショートカットを覚えて使うほうがよいでしょう。Macと異なりSqueakシステムでは、メニューはあくまでメッセージ送信(式の評価)やキーボードショートカット操作を補助する二次的なもの…と考えておくのがよさそうです。
[fig.D]シフト黄ボタンメニューのbrowse it

すると、画面にはStringをブラウズする準備が整ったシステムブラウザが現われます。
[fig.E]Stringをブラウズする準備が整ったシステムブラウザ

ブラウズしたいクラスがStringだと分かっているなら、単に「String」とだけタイプして(行を改めていないなら選択し)browse itするだけでOKです。ただしこの場合、クラス名は正確にタイプする必要があります。OrderedCollectionのように長いクラス名ですべてを正確にタイプするのがおっくうな場合は、特徴的な最初の数文字、たとえば「Ord」くらいまでタイプした後に、cmd+Qを何度かタイプすると補完できます。なお、このcmd+Qによる補完は、クラス名だけでなくセレクタ(メソッド名)の入力時にも重宝するので、是非、覚えておきたいキーコンビネーションのひとつです。
クラス名がうろ覚えのときなどは、いったんシステムブラウザを開いて、そこで提供されているサービスを使うほうが良いこともあります。ブラウザの起動はデスクトップニューから「open...」を選択し、ポップアップしたメニューから「browser」を選択しても行なえます。なお、この操作は、
Browser openBrowser
という式のdo it (cmd+D)とも等価です。
ブラウザが開いたら、左上のペインの黄ボタンメニューから「find class...」を選ぶか、同ペイン内にマウスポインタを移動してからcmd+Fとタイプします。すると入力欄(fill in the blank)が現われるので、探したいクラスの名前の一部を正確にタイプします。先ほど紹介したcmd+Qによる補完と異なり、このときは大文字小文字の区別は不要で、また検索のキーとして入力する文字列片もクラス名の先頭の文字からにこだわる必要はありません。たとえば、OrderedCollecitonなら、edcolleなどとしても探せます。検索キーから一意にクラスを決められないときは、候補一覧を示したメニューがポップアップするので、そこから改めて選択して指定します。
各ペインの表示内容についてはざっと見たり、適当に項目をクリックして選択した際の動きである程度予想がつくと思いますし、詳しくは次回以降に取り上げることにします。ここでは前回のクラスとメタクラスの話に絡めて、上段左から2番目のペインの下に「?」を挟んで存在する「instance」と「class」というスイッチについてちょっとだけ説明を加えておくことにしましょう。
これらは、ブラウズ対象をクラスとするかメタクラスとするかの切り換えスイッチです。instanceを選ぶとクラス(例ではString)、classを選ぶとメタクラス(同、String class)のブラウズモードに切り替わります。言い換えると、instanceスイッチを選んだ状態では、選択しているクラスの“インスタンス”の振る舞いをブラウズしている状態、classスイッチを選んだ状態では、選択している“クラス”自身の振るまいをブラウズしている状態を示します。
[fig.F]classスイッチが押され、String classをブラウズしている状態

図で示したStringの場合、上段右端のペインには、instanceスイッチなら、Stringのインスタンスである'squeak'や'3'などの文字列がメッセージを受けて起動できるメソッドの名前(セレクタ)を、classスイッチならString自身がメッセージを受けて起動できるメソッドの名前が列挙されている状態になります。それぞれのスイッチが選ばれたときのメソッドリストから適当なメソッド(String >> #、String class >> #cr)を選んで、StringのインスタンスとStringがどちらのメッセージを受け付けるかどうか試してみましょう。
'3' * 4 " 文字列の先頭から数値を読みとり計算を行なう => 12"
String * 4 " String class のインスタンスは #* を知らないのでエラー"
'squeak' cr " String のインスタンスは #cr を知らないのでエラー"
String cr " => 改行文字のみからなる文字列 "
スイッチに対応した正しい組み合わせのみ応答できているのがお分かりいただけると思います。エラー時に表示される赤いウインドウは、気にせずそのまま閉じてしまってください。0.1や1.23などが属するクラス「Float」などについても、似たような「お遊び」は可能なので是非試してみてください。
次回は、クラスに定義されたメソッドのブラウズについて解説します。
このページを編集 (5905 bytes)
 |
以下の 1 ページから参照されています。 |
This page has been visited 1083 times.