ソフトな忘却力(42) Smalltalk、Pharo、気になるMorphってなんだ?

Joseph Halfmoon

Smalltalkの法灯を受け継ぐPharo処理系を練習中デス。「中身はどうなっているかなんて気にせずにイケイケ推奨」らしいPharo様ですが、度々その名を聞くので気になって夜も眠れない(ホントか?)のがMorphって言葉です。「変態?」どうもそれとは違うみたいです。練習問題でその一端が発覚。

※「ソフトな忘却力」投稿順 Index はこちら

※今回の動作確認は、Windows11上のWSL2の上のUbuntu24.04LTS上のPharo 10.0.0を使用しています。

The Lights Out、ソフト練習用のミニゲーム

さて、以下の文書ではChapter 6、

Pharo by Example 9 – 2022 Edition

以下の日本語版ドキュメントでは

https://github.com/SquareBracketAssociates/PharoByExample-japanese/blob/master/PBE1-ja.pdf

Chapter 2に登場するのが Lights Outという小さなゲームです。これを作りながらPharoの流儀を学べって感じです。ただし、日本語版をおつくりいただいたころのPharo様はバージョンがかなり若かったようで、2022年のPharo 9での記述とは微妙に異なる部分があります。日本語版のコードそのままだと Pharo 10上ではダメな部分がありました。

さてこのLights Outというのはグラフィック使ってます。最初に定義しなければならないクラスが以下に。LOCell

SimpleSwitchMorphとな。出たなMorphという感じ。

ついMorphまで遡ってしまう

「中身なんてイチイチ気にせずにイケや」というお教えに逆らって、つい遡ってしまいました。だって、UMLのタブ開いたらバレバレじゃん。。。こんな感じ。LOCcellUML
一番下に、定義したLOCellというクラスがありますが、そこからSuperな人たちをたどっていくとその根っこにはMorphがおられました。まあ、UMLのクラス図のタブを開かなくてもSystem Browser上でも見えるけど。こんな感じ。protocol

気になったのでMorphのHelpを読んでみたらこんなんでした。MorphClassHelp

どうもPharoの「充実したGUI環境」を支える根幹のクラスのようです。どおりでアチコチに出没しているのね。

Pharoの地のウインドウに出現する以下の「Pharoのロゴ」もそう。
ImageMorph

右クリックで登場するWorld contentsメニューの ImageMorphという「オブジェクト」みたいです。

LOCellをnew

Exampleのお教えどおり、LOCcellにインスタンス・メソッド initialize を追加してみました。こんな感じ。黄色のマーカはこっちで勝手につけてます。initialize

この「initialize」というお名前が特別なのは、新たにクラスインスタンスを生成したときに、生成されたばかりのインスタンスに自動で送られるメッセージになるためのようです。そして継承しているSuperクラスにも初期化をお知らせするために、先頭で super initializeするのがお作法みたい。知らんけど。

LOCell newした結果をInspectorでみてみよ、というご指示もあったので、Workspaceで LOCell newをインスペクトしたらこんな感じ。Inspector

入力したのは短いコードだけれども、背負っているSuperな者どもから引き継いでいるものは多いのね。。。

しかし、Pharo様流なのは、Inspectorウインドウの中からでも インスペクトしている実体オブジェクト self に対してメッセージを送ることができること。上記のような操作をdo itした結果が以下に。赤丸は当方で書き込みました。LOCell_displayed

赤丸の中にある黄色い座布団みたいのがLOCellです。確かにクリックするとONとOFFで色が変わります。しかしx印も何もないウインドウ、困ったな。

ALT+SHIFT+クリック(メタクリック)

があるじゃん。やってみます。ALT_SHIFT_METACLICK

LOCellの周りにいろいろでてきましたな。今回はx印で閉じるだけっすけど。

この後、Exampleの御本ではSystem Browserのエディタの機能やら、Debuggerやらを使っていろいろやっているのだけれど、今回はここまで。忘却力の老人は1回じゃとても覚えきれません。

ソフトな忘却力(41) Smalltalk、Raspberry PiでもPharo へ戻る

ソフトな忘却力(43) Smalltalk、Pharo、Lights Outゲームが消えん? へ進む