Smalltalk-72で学ぶOOPの原点:組み込みの構造化エディター(Enter、Leave、Exit)

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


念願のクリック、's(instance_evalで使う記号)、⦂(オープンコロン)を手に入れた!の続き)

REPLの便利機能(redofix)とコード/配列エディター

Smalltalk-72のREPLでは、redoで直前に評価した式を、またredo <正数>と数値を付すことで指定した数だけ前に評価した式の再評価を行えます。

f:id:sumim:20191213125038p:plain
直前に評価した式を「redo

f:id:sumim:20191213125108p:plain
直前の評価結果に「redo」による再評価結果が追記される

一方、fixは指定した式の一部を変更して評価できます。このとき、コード(実体は配列)専用のエディターが起動します。redo 同様にどのくらい遡るかも指定できます。

f:id:sumim:20191213125609p:plain
「fix」で直前に評価した式の一部を変更して再評価する

f:id:sumim:20191213125656p:plain
組み込みのコード/配列エディターが起動

このコード/配列エディターがマウスクリック必須なので、これまでfixやアクション/クラス編集用のeditなどが使用できずたいへん不便でしたが、今後はだいぶREPLの使い勝手も改善されそうです。ただし前回紹介したちょい直し版を使っていない場合、残念ながらこのエディターでの操作はできません。escキーを押してそのまま終了してください。

「Enter」「Leave」「Exit」

このエディターは配列の要素の編集が基本的な機能です。要素内に配列があるときは()トークンに分断されないよう、実際は1文字の記号)と省略されて表示され、編集中はひとつの要素として扱われます。

配列(もしくはコード)の中にネストした配列がひとつしかないときは「Enter」コマンドをクリックするとその中身を見ることができます。複数あるときは、「Enter」コマンドがハイライトした状態で中身を見たい配列(()で表示されている)をクリックします。

f:id:sumim:20191213150459p:plain
「Enter」でネストした配列の内容を表示

元の表示に戻るには「Leave」を使います。戻る画面がないときはエディターを抜けて編集中のコードを再評価します。「Exit」はどの階層からでもエディターを直ちに抜けてやはり編集中の式を再評価します。

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