まさるblog

越後在住子持ちプログラマー奮闘記 - Author:まさる(高野 将、TAKANO Sho)

目次

Blog 利用状況

ニュース

著書

2010/7発売


Web掲載記事

@IT

.NET開発を始めるVB6プログラマーが知るべき9のこと

CodeZine

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

第1回 3層データバインドを正しく活用しよう(前編)

ブログパーツ


書庫

日記カテゴリ

コミュニティ

電卓祭~その3~

 【前回のあらすじ】

コードがとってもスパゲッティ化してますorz

というわけで、今回はリファクタリング。

 

まず、これまでは入力状態と計算状態を同じ基本クラスVirtualStateから派生していたのを、入力状態はIInputStateインタフェイスを実装したクラス、計算状態はICalculateStateインタフェイスを実装したクラスに分けました。

次に、画面で状態を保持して管理していたのをやめ、新たに状態管理用のStateManagerクラスを作成して入力状態、計算状態、表示文字列、入力数値を管理するようにしました。これにより画面からは余分なコードがなくなり、基本的にはStateManagerのメソッドを呼ぶだけになりました。

最後に、実際の計算ロジックと数値を表示文字列に変換する処理を共通化するため、CalculatorCommonクラスにstaticメソッドとして定義し呼び出すように修正しました。

 

なお、入力状態の状態遷移をその1で作成したものから見直し、以下のようなものにしました。

InputState_2

変わったのは以前は0だった状態を未入力としたことと、=、計算、クリアボタンを押下した際、未入力状態に戻るようにしたことの2点です。

 

#上記内容の詳細はソースをご覧ください。WankumaCalculator2_070712.zip

 

さて、今回までで大体形にはなってきました。今のところ仕様の1,2,3,4,5,6が満たせたかな?

あと1つ残ってますが、√の計算が残っているので、これを次回作って仕様の12を満たすことでOKということにします。

ついでに、0除算、桁あふれチェック処理と、%の計算も次回やってみます。

投稿日時 : 2007年7月12日 23:48

Feedback

# re: 電卓祭~その3~ 2007/07/13 13:20 通り*

私が言うのはおこがましいですが、今回はすごくスッキリしてますね!
全部見られてないんですが、スパゲッティじゃなくて高級料理の匂いがしてきます。絶対高そうですヾ(>▽<)ゞ
#これが噂の「タイ料理ソース」の香り?w
1+2+3=も出来るしww
.....ちゃんとしたコメントは、もっとじっくり見てから考えます(^ー^;

# re: 電卓祭~その3~ 2007/07/18 0:38 通り*

お待たせしました!(待ってたことにw)
いろいろ調べていたら、ちょっとうまく動かないところを見つけました。
1+2=で3が表示された後に1+2=ってすると5になるんです。
今度はじ~~~っっくり考えて、StateManagerのPushNumberに
if (this.CalculationState is CalculatedState)
  this.CalculationState = new BeforeCalculateState(this);
を書き足したところ、直ったみたいですv(^-^)
これで正解ですか?
実はソース見てる時はどう直せばいいかわからなかったんだけど、お風呂で図を思い浮かべてたら直すべき個所が浮かんできました。これって、状態遷移図の効能なのかも?

# re: 電卓祭~その3~ 2007/07/18 0:49 通り*

大きなお世話しますが、DecimalToStringのところはTrimEnd('0')を使うとスッキリしますよ。きっと。

ところでSubversion使用されてるんですよね?
私もVSSから鞍替えしようかと企んでます。
フリーでVSSみたくVisualStudioと統合できるものってご存知ですか?少しは調べてるんですが、よくわからなくて...

# re: 電卓祭~その3~ 2007/07/18 1:22 ܂まさる

色々とどうもありがとうございます。

>これで正解ですか?
これは思いっきりコーディング漏れでしたorz
状態遷移図には書いてあるのに・・・
対応はそれでいいと思います。

>TrimEnd('0')
これは気付かなかったです。というかどっかで見たんだろうけど忘れてた・・・
#実は"RTrim"で探してました。

>フリーでVSSみたくVisualStudioと統合できるものってご存知ですか?
フリーのは"AnkhSVN"があります。VS2005に統合されます。日本語化はできませんが、TortoiseSVNが使えればたぶん問題ないと思います。

とはいっても、私もSubversionは最近個人的に使い始めたばっかなんで、実はあんまわからんのです。
もうちょっと使って色々覚えたら会社で使おうかとは考えているんですが。

# re: 電卓祭~その3~ 2007/07/18 15:22 通り*

>対応はそれでいいと思います。
やった。ありがとぉ。
>というかどっかで見たんだろうけど忘れてた・・・
こんな方法じゃなくて、小数点以下の無用なゼロがいらない場合の書式指定文字列があってもいいのにって思います。
>フリーのは"AnkhSVN"があります
あるんですね。情報感謝です。
さっそくいろいろ調べてみたんだけど、日本語の情報は少ないですね...。使ってる人少ないのかな。
>もうちょっと使って色々覚えたら
ブログで記事をお願いしまーす(^^;

# 電卓祭~提出~ 2007/07/20 23:17 まさるblog

電卓祭~提出~

# 電卓祭~提出~ 2011/05/14 17:59 まさるblog

電卓祭~提出~

タイトル
名前
Url
コメント