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
アクションを使います。
show float
でコード片が最後に追加されているのを実際に見ることができます。
打ち間違いなどあってうまく動かないときはedit float
で組み込みのエディタを起動しそこで修正してください。なお、組み込みエディタは前述の“ちょい直し版”でのみ操作可能です。ご注意あれかし。
次にreport
とdemand
というアクションを定義します。これらはそれぞれキャプション付きの出力と入力機能を提供します。
demand
は、as <文字列>
とメッセージに続けると指定した文字列をキャプションにし、これを省略すると代入する変数名がキャプションとして表示され、直後にアルトを模したアイコンがプロンプトとして表示されるので値を入力してdo-it(「\」キー)すると値が入力されます
最後に本体のpayment
アクションを定義すれば完了です。あいかわらず「$」マークが入力できないので、キャプションで「$」を表示するために、いったん一時変数dollar
に長さ1文字の文字列を代入し(☞dollar ← string 1.
)、それを「$」マークの割り振られたコード27
に置き換えておき(dollar[1] ← 20
)、適宜キャプションの最後に追加(+ dollar
)というようなことをしています。
定義後にpament
と入力してdo-it(「\」キー)すると、借入額、年利、返済年数、年当たりの返済回数を尋ねられるので入力すると結果が出力されます。