前回までで、とりあえず形にはなりましたが、あといくつか問題が残ってました。
- √の対応
- %の対応
- 0除算、Overflowの対応
この他、コメント欄にて通り*さんに指摘された、
- 1+2=で3が表示された後に1+2=ってすると5になるんです。
のバグもありました。
今回はこれらに対応して、提出したいと思います。あと、ついでに仕様22.クリップボードにコピー機能も付けちゃいます。
まずはバグ対応。これは「計算後状態」の時に「数字」ボタンを押下した際に、「計算前状態」に戻す処理が抜けていた野が原因だったので(前回のリファクタリング時のデグレート)、それを直すことでOKです。
そして、今回のメイン、「√」、「%」の処理です。
まず、状態遷移図に「√」、「%」を押下した際の状態遷移を追加します。
[入力状態の状態遷移図]
[計算状態の状態遷移図]

これにしたがって、これまでと同じようにStateパターンで実装します。この中で梃子摺ったのは、「計算前状態」で「√」ボタンを押下した際に「計算後状態」にするところです。この状態遷移が必要なことに気がつくまでしばらくかかってしまいました。
次に、0除算、Overflowの対応です。これは「計算ボタン」押下、「=」ボタン押下、「%」ボタン押下時に、「DivideByZeroException」、「OverflowException」が発生したら、"E."を表示し、それぞれ「入力前状態」、「計算前状態」に戻すことにしました。本当は"E."の表示後、「AC」か「C」ボタン以外の操作を無効にしたかったのですが、ちょっと時間が足りなくてできませんでした。
そしてクリップボードコピー機能です。まず、画面に「コピー」ボタンを追加しました。
あとはコピーボタンのクリックイベントで、System.Windows.Forms.ClipboardクラスのSetTextメソッドを呼んでやるだけです。
と、いうわけで、ここまでで私の「わんくま電卓」はこれで完成とします。
アクア先生、お願いします。→WankumaCalculator2_Final_20070720.zip
さて、4回にわたっての電卓開発でしたが、非常に面白く、なかなか勉強になりました。ただ、残念ながら締め切りが来てしまい、まだ納得いってない部分も残したままの提出となってしまいました。この辺は電卓祭関係なく、今後もちょこちょこ直していこうかとは思ってます。
最後に、課題を提案してくれたアクアさんに感謝して、このシリーズを終えたいと思います。アクアさん、どうもありがとうございました。