Smalltalk-72で学ぶOOPの原点:サンプルコード「ローンシミュレーション」(report、demand、payment)

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


サンプルコード「joe the box」(is、'sの追加)の続き)

ローンシミュレーション

「Open the ST-72 Manual」でダウンロードして表示することができるSmalltalk-72操作マニュアルのPage 84からにあるローン返済シミュレーションを書いてみます。

元コードではfloatクラスに$メソッドを追加して小数点以下を丸める操作ができるようにしているのですが、あいにくLivelyWeb版のSmalltalk-72(と、それに手を加えたちょい直し版)では「$」のグリフを持つ記号を入力できないので、代わりにdollarメソッドとして追加することにします。既存クラスへのメソッド(パターンマッチのコード片)の追加にはaddtoアクションを使います。

f:id:sumim:20191227195000p:plain
「float」クラスへの「dollar」メソッドの追加と動作確認

show floatでコード片が最後に追加されているのを実際に見ることができます。

f:id:sumim:20191227195152p:plain
「dollar」メソッド(パターンマッチのコード片)が追加された「float」クラス

打ち間違いなどあってうまく動かないときはedit floatで組み込みのエディタを起動しそこで修正してください。なお、組み込みエディタは前述の“ちょい直し版”でのみ操作可能です。ご注意あれかし。

次にreportdemandというアクションを定義します。これらはそれぞれキャプション付きの出力と入力機能を提供します。

f:id:sumim:20191227200531p:plain
キャプション付きの出力機能を提供する「report」アクション

demandは、as <文字列>とメッセージに続けると指定した文字列をキャプションにし、これを省略すると代入する変数名がキャプションとして表示され、直後にアルトを模したアイコンがプロンプトとして表示されるので値を入力してdo-it(「\」キー)すると値が入力されます

f:id:sumim:20191227200617p:plain
キャプション付きの入力機能を提供する「demand」アクション

最後に本体のpaymentアクションを定義すれば完了です。あいかわらず「$」マークが入力できないので、キャプションで「$」を表示するために、いったん一時変数dollarに長さ1文字の文字列を代入し(☞dollar ← string 1.)、それを「$」マークの割り振られたコード27に置き換えておき(dollar[1] ← 20)、適宜キャプションの最後に追加(+ dollar)というようなことをしています。

定義後にpamentと入力してdo-it(「\」キー)すると、借入額、年利、返済年数、年当たりの返済回数を尋ねられるので入力すると結果が出力されます。

f:id:sumim:20191227202159p:plain
「payment」アクションの定義と実行例

サンプルコード「じゃんけんゲーム」(@nrslibさんのSIMULA版を移植)に続く)