Smalltalk-72で学ぶOOPの原点:組み込みの構造化エディター(定義済みアクションやクラスの編集)

アラン・ケイの“オブジェクト指向”というアイデアをもとに(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72で遊んでみるシリーズです(なお最新のSmalltalkについては Pharo などでお楽しみください!)。他の記事はこちらから→Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019 - Qiita


組み込みの構造化エディター(Add、Insert、Replace、Delete、Move、Up、Push)の続き)

addtoアクションで定義済みアクションやクラスにコード片を追加する

たとえばto foo (isnew)のように、最小限の定義しかしていないクラスfooがあったとして、これだとfooインスタンスはクラスを問い合わせるis?というメッセージには答えられない(正確には、スルーされたメッセージの先頭のisがアクションとしてアクティベートされ、それが続く?メッセージを受け取ってデフォルト値であるかのように「untyped」を返す偽装をしている)という話はすでにしました

f:id:sumim:20191215230946p:plain
最少構成のクラスに属するオブジェクトはクラスの問い合わせに正しく応答できない

このクラスfooインスタンス(上の例ではxに代入)に正しく自分が属するクラスを返させるためには、fooのメソッドに∢is ⇒(ISIT eval) というパターンマッチを追加すればよいわけですが、これはaddtoアクションを使うことで簡単にできます。

f:id:sumim:20191215231848p:plain
「addto」でクラス「foo」にパターンマッチを追加

コードを( )で括って与えるtoアクションと違い、addtoアクションで追加したいコード片は配列リテラル(頭にを追加。余談ですが、より厳密にはこれもというアクションへのメッセージ送信で実現されている──)なので注意してください。

本格的にクラスやアクションのコードを編集するならeditアクション

REPLのfixと同じように、構造化エディターを使ってクラスやアクションのコードも編集できます。

f:id:sumim:20191215232835p:plain
「edit」アクションにコードを編集したいクラスをメッセージとして送ると…

f:id:sumim:20191215232940p:plain
構造化エディターが起動し、「fix」と同様にコードを編集できる

使い方は前回紹介したfixのそれとまったく同じです。

組み込みの構造化エディター(ソース概説)に続く)