アラン・ケイの“オブジェクト指向”というアイデアをもとに(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72で遊んでみるシリーズです(なお最新のSmalltalkについては Pharo などでお楽しみください!)。他の記事はこちらから→Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019 - Qiita
(Rubyのinstance_eval相当の「's」の続き)
defs
による、ユーザー定義クラス・アクションの一覧
defs
には、ユーザーが定義したクラスやアクションが収められています。
defs
はobset
というクラスのインスタンスです。
obset
について
obset
は、今のSmalltalkのBag
(重複を許す集合)とSet
(重複を許さない集合)のどちらとしても使えるSmalltalk-72組み込み(ブートストラップ時=ALLDEFSに定義)のコンテナクラスです。
定義を見るとわかるように、add <要素>
メッセージで追加した場合は要素の重複を許し(つまり、すでに同じ要素があっても追加される)、← <要素>
メッセージで追加した場合は既に追加済みなら無視される仕組みになっています。
アクションやクラスの定義の出力
show
アクションにクラスやアクションを送ると、その定義を整形して出力することができます。
例によってALLDEFSのto show …
から始まる記述付近に定義があるので余力があれば参照してみてください。
まさにこのようにALLDEFSから該当するコードを探して読んだり(組み込みクラス・アクションの場合)、edit
で配列(ブロック)にいちいち潜りながら読むよりずっと便利な機能なのですが、縦に長くなりがちな整形したコードを出力するにはデフォルトのウインドウの縦幅が狭すぎます。ちょっと長めのコードをshow
で表示させると、すぐ画面からあふれて使い勝手が悪いです。これを少しでも解消するため、ウインドウを移動してもっと大きく全画面表示にできないか考えてみましょう。
(ウインドウを無理矢理サイズ変更&移動するに続く)