前回までで、とりあえず形にはなりましたが、あといくつか問題が残ってました。
- √の対応
- %の対応
- 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回にわたっての電卓開発でしたが、非常に面白く、なかなか勉強になりました。ただ、残念ながら締め切りが来てしまい、まだ納得いってない部分も残したままの提出となってしまいました。この辺は電卓祭関係なく、今後もちょこちょこ直していこうかとは思ってます。
最後に、課題を提案してくれたアクアさんに感謝して、このシリーズを終えたいと思います。アクアさん、どうもありがとうございました。
[2011/5/13追記]
この電卓のソースコードのライセンスはNYSL(http://www.kmonos.net/nysl/)とします。
A. 本ソフトウェアは Everyone'sWare です。このソフトを手にした一人一人が、
ご自分の作ったものを扱うのと同じように、自由に利用することが出来ます。
A-1. フリーウェアです。作者からは使用料等を要求しません。
A-2. 有料無料や媒体の如何を問わず、自由に転載・再配布できます。
A-3. いかなる種類の 改変・他プログラムでの利用 を行っても構いません。
A-4. 変更したものや部分的に使用したものは、あなたのものになります。
公開する場合は、あなたの名前の下で行って下さい。
B. このソフトを利用することによって生じた損害等について、作者は
責任を負わないものとします。各自の責任においてご利用下さい。
C. 著作者人格権は まさる に帰属します。著作権は放棄します。
D. 以上の3項は、ソース・実行バイナリの双方に適用されます。