kojiko-android’s blog

開発中にハマった時の解決策や、忘れがちなことを残しておきます。

【電卓アプリを作るvol.2】アルゴリズム

前回まで・・・
状態遷移表ができました。
今回はこの状態遷移表に基づいた処理を、どう実装するのかを考えます。


状態を定義

A、B、C、Dの各状態を、クラスで表現します。

「状態をクラスで・・・」というと、漠然としていますが、
結局のところ、何かイベントが発生したときに、
その時の状態に沿ったメソッドを呼び出す、
ということを意味しています。

仮に、各状態を表すクラスをA、B、C、Dとし、
これを格納する変数をstateとします。
キー操作があったときは、
state.メソッド名();
という形で実行します。
”電卓的に”状態が変わったら、
state = Bのインスタンス
といった具合にインスタンスを差し替えて、状態の遷移を明示的に行うことで、
次に同じメソッドを実行しても、こんどは状態Bの処理が行われます。


キー操作

UIをデザインし、キーとしてButtonを設置したら、
オンクリックリスナーを定義し、
クリックされたキーに対応するメソッドを、
変数stateから呼び出します。
イベントはある程度カテゴライズしないと記述が膨大になり大変なので、

・数字キーが押された
演算子キーが押された
・イコールが押された
・クリアーキーが押された
・%キーが押された

くらいに分けますが、
全てのキーを定数で定義し、
引数に渡して、最終的には明確に処理します。


電卓としての処理

ユーザーの操作をイベントとして送ったら、
現在の状態に応じた、適切な命令に辿り着くはずです。
その命令こそ、電卓の肝となる部分です。
演算はもちろん、
文字を末尾に付け加える、
押された演算子を記憶しておくなども含まれます。
電卓がやっていることを全て再現する必要があります。


電卓のディスプレイ

電卓を使う人が求めているものは、おそらく”答え”ですので、
内部で処理したものをユーザーから見えるようにしなくてはいけません。
計算結果を文字列にして、アクティビティに送り、
テキストビュー等に表示します。
電卓らしく振舞うならば、
入力途中も表示する情報はあります。
また、10 ÷ 3 の結果を
”3.3333333333333333333”にするのか
”3.333”にするのかも考えます。
12,345のように、カンマも入れた方が見やすいでしょう。
式を表示するアプリも多く見かけます。


たかが電卓と思いきや、実は複雑なことをやっております。
これが¥100ショップで買えてしまう時代です。
プレイストアで¥100以上で配布できるような電卓を創りましょう!