電卓アプリ

計算して答えを出す

数字が一つ入ったので、もう一つ入れて、それに、四則演算の記号のボタンがあれば、答えが出せる

実際には、一つ目の数字を入れて、次に演算記号を入れて、2つ目の数字を入れて、イコールを押すと計算する。

演算記号を入れたタイミングで、変数Bを変数Aに入れて、新たに2つ目の数字を変数Bに入れれば、計算に必要な要素はすべて揃う。

で、実際の計算。

算術式自体は簡単だけど、四則演算は+-×÷4種類あって、それぞれごとに計算が違う。
これを本に載っていた、Switch〜caseでやってみる。

四則演算のボタンに、どの記号が押されたか識別する名札を貼っておき、計算するときに、名札をみて、行う計算を変える。

@IBAction func pushPlus(sender: UIButton) {
       kigou = "tasu"
}

と、ボタンのアクションに書いておいて、

計算部分のファンクションに、

switch kigou {
       case "tasu": answer = value1 + value2
      
case "hiku": answer = value1 - value2
      
case "kakeru": answer = value1 * value2
       case "waru": answer = value1 / value2
       default: answer = value1 + value2
}

と、名札によって、違う処理を書いた。
defaultがないとエラーが出てしまうので、実際には使わないが、足し算処理を書いておいた。

これで記号にあった計算はできそうだが、次はどのタイミングで計算するか。

普通はイコールボタンを押したら、計算を走らせて、答えを出力する。

でも、ちょっと考えると、イコールボタンを押さなくても、ここまでで計算する要素が、すでに決まっているのだから、計算した結果をすぐに表示できるな、と。
なので、イコールボタンを付けないでやってみる。

あとは、記号を押したときに、その記号を表示するラベルを用意。

実際に組んでみると、ボタンを押すと、どんどん答えが書き変わって、ちょっと楽しい。

演算記号を押すと、答えの値が、変数Aに代入され、変数Bはゼロに戻して、変数Bが入力待ちになる。
そこでボタンを押すと、またあらたに計算が始まる、始まるという仕掛け。

基本の計算をする- 電卓っぽく入力して表示する


電卓アプリの続き。

基本設計は決まったが、実際にこれを動くようにしないといけない。

今、自分がSwift & Xcodeで知っているのは、変数の扱い、計算と、ボタンの接続、ラベルの書き換えとかぐらい。

数字ボタンを画面に設置しただけでは、勝手に数字が変数に入ってくるわけではない。そこを自分でプログラムしないといけない。

1と書かれたボタンを押したら、変数Bに1を入れる、という処理をする。

@IBAction func pushOne(sender: UIButton) {
value3 = 1
}


これはこんな感じ。

次。

123という3桁の数字を入れるとする。

最初の1を変数Bに入れる。これは簡単。
しかしそのあと、2を押したら、元の1を消さずに12としないといけない。

これを計算で考えると、

最初の数1×10 + 次の数2 = 12

なので、入力したての数を変数Cとすると

変数B = 変数B * 10 + 変数C

でいけそう。

value1 = value1 * 10 + value3

こんな感じか。

変数Bの表示を画面に表示するのは、表示用のラベルに対して、

ラベルB.text  = 変数B

なのだけど、出力は文字列でないとダメっぽいので、

ラベルB.text  = String(変数B)

でいけた。

こんな感じで、数字ボタンを10個作って、それぞれの値を変数Cに入れる。

それを変数Bに入れて、表示すると、電卓っぽく数字を一つずつ入れると、電卓っぽく桁が増えていく表示ができた。

オリジナル電卓アプリをつくる

少しSwiftを覚え始めたので、何か作ってみたくなる。

入門編ということで、電卓なら、実用できるし、簡単かな、と。
(でも後から考えると、意外と大変だった。)

基本設計を考える。

電卓アプリなので、計算できないといけない。
電卓は、数字ボタンを押すと、例えば、足し算ができる。

最初に入れた数、と、計算記号を押し、その後、2つ目の数を入れ、イコールを押すと答えがでる。
つまり3つの変数と、計算記号のボタンがある。

なので、変数Aに、変数Bを足すと、答え変数Cとして出力される、というのが基本と考えればよさそう。

答え変数C = 変数A + 変数B

Swiftで書くとこんな感じ。

answer = value1 + value2

普通の電卓は、入力フィールドも、出力フィールドも同じ窓で行なわれる。
これはこれはこれでシンプルだけど、変数Bを入れている間に、変数Aがなんだったか、不安になることもたまにあるよな、と。

液晶が1行しかない時代の苦肉の索だったとは思うけど、iPhoneのように、リッチな液晶がある時代には、1行表示にこだわらなくてもいいのではないか。
変数A、変数B、答えの全部を同時表示してもいいんじゃない?

というわけで、3行表示の電卓をつくることにした。

でも3つの窓を扱うのは、操作的にはシンプルじゃない。

入力時に使用するのは変数Bだけにして、計算記号を押したら、変数Bの値を変数Aに代入して、変数Bはクリアし、新たに足す側の数字を変数Bに入れる。こうすれば、入力するのは変数Bだけに済みそう。

プロにアプリ開発者なら、仕様の設計をしっかりやるんだろうけど、趣味でやっているので、超行き当たりばったりだけど、これが面白い。
レゴでも、大まかなアイデアは最初に考えるけど、細部はその場で考えるのに似ている。