さて、今回は適当に決めたアルゴリズムに修正を加えていきます。
この行き当たりばったり感がヤバイね。
でも、初プログラム面白いです。
今回は前回のバグの修正と、処理を分離するオブジェクト指向型プログラムを書いていきます。
XcodeでiPhoneアプリを作る基礎を学ぶ まとめコードを修正
コードを下記のように修正した。
– (IBAction)inputNumber1:(id)sender {
self.countNumber = (self.countNumber * 10) + 1;
NSString *print = [[NSString alloc] initWithFormat:@”%d”, self.countNumber];
self.numberOutput.text = print;
}
– (IBAction)inputNumber2:(id)sender {
self.countNumber = (self.countNumber * 10) + 2;
NSString *print = [[NSString alloc] initWithFormat:@”%d”, self.countNumber];
self.numberOutput.text = print;
}
スッキリしてしまったw
コードの内容を説明。
self.countNumber = (self.countNumber * 10) + 1;
countNumberに10をかけて、さらにボタンの数字である1を足し、それをプロパティcountNumberに代入する。
countNumberは、アプリ起動時は0なので、10をかけても0。
(0×10)+1=1ってことになるね。
ボタンを2度押した時は、(1×10)+1=11、3度押したときは(11×10)+1=111ってことになる。
以下のコードは前と同じ。
ボタン2も、
self.countNumber = (self.countNumber * 10) + 2;
にしただけ。
前回のコードは111と一番先の数値にボタン数をべき乗したので、一番数が多い桁がボタンを押した数になるというひどいミスをおかしてたけど、今回は111と最終桁にボタンの数字を足すことで解決。
なんという凡ミスであろうか。
エミュレータで確認してみる
2ボタンを押すと・・・
2が出力された。
ウム。
ここまではいい。
1ボタンを押してみると・・・
キタ━━━━━━(゚∀゚)━━━━━━!!!!!
ちゃんと2の後ろに表示された!
こんなあたりまえの事が、なんでこんなに嬉しいんだろうw
その1で作ったプロパティcountButtonは必要なかった(;´Д`)
ボタンのコードがほぼ同じ
それにしても、ボタン1とボタン2のコードがほぼ同じ。
このコードをボタンの数だけ書くというのも煩わしいし、ボタンひとつのコードを直すたびにすべて修正を加えなきゃ行けないのはミスとバグの原因になる。
なので、押したボタンの数字の確認と、実際の計算処理を分離してみよう。
これぞオブジェクト指向型プログラミングだね!(多分)
コードを下記のように修正
まず、使わなくなったプロパティcountButtonの名前を変更する。
ViewController.h
@property (nonatomic, assign) NSInteger countButton;
を、
@property (nonatomic, assign) NSInteger buttonNumber;
に変更。
変数名をわかりやすいように変更しただけ。
ViewController.m
@synthesize countButton;
を、
@synthesize buttonNumber;
に変更。
ViewController.hの@Property〜とViewController.mの@synthesizeは対で使う。
深いことを考えないでそう覚える。
ボタンを押したときの処理(メソッド)を下記のように修正。
大きく変更したところは赤文字で。
– (IBAction)inputNumber1:(id)sender {
self.buttonNumber = 1;
[self labelOutput];
}
– (IBAction)inputNumber2:(id)sender {
self.buttonNumber = 2;
[self labelOutput];
}
– (void)labelOutput{
self.countNumber = (self.countNumber * 10) + self.buttonNumber;
NSString *print = [[NSString alloc] initWithFormat:@”%d”, self.countNumber];
self.numberOutput.text = print;
}
またつたない説明。
– (IBAction)inputNumber1:(id)sender {
self.buttonNumber = 1;
[self labelOutput];
}
これはボタン1が押された時、プロパティbuttonNumberに1を代入する。
そして、メソッドlabelOutputを行う。
という意味。
ボタン2もbuttonNumberに2を代入するだけでボタン1と処理は同じ。
– (void)labelOutput{
self.countNumber = (self.countNumber * 10) + self.buttonNumber;
NSString *print = [[NSString alloc] initWithFormat:@”%d”, self.countNumber];
self.numberOutput.text = print;
}
ボタンを押したときに流れる処理(メソッド)labelOutputの記述。
前は赤字のところはボタン毎に処理を書いていたためボタンの数字だったが、今度はこの処理を数字のボタンすべてで使い回すため、buttonNumberに代入された数値を足す、というように変更している。
ボタン1を押す→buttonNumberに1が入る→labelOutputがボタン1の桁上げ計算を行う
って感じ。
前よりさらにコードがスッキリしたもんだ。
四則演算計算機を作るその1その2とはいったいなんだったのか。
数字ボタンと四則演算ボタンを加える
ボタンのコードも出来上がったので、0〜9のボタンを作り、inputNumber0〜9までコピペする。
ついでに四則演算やイコールなどのボタンを作る。
なんだかそれっぽくなってきた!
が、0〜9までのボタンはコードが記述されているからきちんと表示されるが、そのほかのボタンはなんの機能もしない。
次回は計算
次回は四則演算ボタンを押して、実際計算できるようにしてみます。
上手くいくかは不明。
進んでますね\(^o^)/
こちらは見ているだけで気の利いた事何も言えないんですが、一つ一つ習得されてログに残される姿勢が本当に素晴らしいと思います!
これからも楽しませて戴きつつ、自分もくずのはさんの取り組みを少しでも見習って行きたく思います。
ありがとうございますヽ(´ー`)ノ
じつはXcodeの記事は全然アクセスが無くて、
誰も見てないんじゃ無いかなと不安に思ってましたw
でも少しずつかけるようになってきてちょっと楽しいですw
確かにトレースししにくいネタ(スミマセン!w)なのでアクセスは落ち着くかもしれませんが、常連さんはみんな見てますよ!
ですのでどんどんイッちゃって下さい(^o^)/
ですよね(;´Д`)
Xcodeは難易度高いかなと思ってたんですよねw
恐ろしい勢いでアクセス数が減って行くので誰が見ているんだろうと不安になって(;´Д`)w
とりあえず計算機完成までは頑張ります!
ありがとうございます!
ここまでくると、興味のない方には
ホームページにしかみえないでしょうからねw
まったくやったことない状態からここまでやってしまうとは。
前回のはともかく、今回のは俺にはさっぱりわかりませんww
ただせっかくここまで来たらリリースまで見守りたいですね。
完成したらダウンロードしますよ(^^)v
練習用に作った何の変哲もない計算機なので、
多分リリースされることはないと思いますけどねw
でもメモアプリか何か1つ作ってみたいです。
作れるんだろうか・・・?w