しっかり指定してくれなきゃわかんないでしょうが!
プログラミングを利用すれば人がやるより比較しようがないくらい効率的に処理を行ってくれるってやっぱ最高。
と、思うじゃない?
別にケチ付けようってわけじゃぁございやせん。今の世の中プログラミングがなきゃ回んないのも事実でございます。
「じゃ、なんで『と、思うじゃない?』なんて言うの?」ってところが今回のミソ。まぁそんなこと求めるなって話ですが、「プログラムは融通が利かない」、これなんですよね。
欲しい答えを得るためには適切なプログラムを組まなくてはならない。あっちは「えぇ?これほんま合ってますのん?実はお客さんこんなこと求めてるんじゃないんですか?」なぁんて言ってくれない。「あんたがこう書いたからそれに従って出力しただけでしょうが!」とご立腹。
どういうこと?こういうこと。具体例に行ってみましょう。
5÷3は1
タイトルは後程回収するとしてとりあえず四則演算用のアプリケーションを作成。
前回ご紹介した『Windowsフォームアプリケーション』先生にまた出張ってもらいましょう。
というわけでできたアプリケーションがこんな感じ。いい感じでしょう?
やっぱり『Windowsフォームアプリケーション』先生は偉大だなぁ。
さぁ、ボタンを押せば四則演算の開始です。今回は値1を5、値2を3として計算しましょう。
というわけでぽちっとな。
5+3=8
5-3=2
5×3=15
「5÷3」は・・・割り切れない?1.66666?御冗談を。
答えは1!
・・・何を馬鹿なと思うわけです。
ここでタイトル回収ですね。なぜ答えが1となるのか、実際にコードを見てみましょう。
さぁさぁ、Convert.ToInt32の所にご注目。textをint型に変更していますね。
これがネック!int型は整数しか扱えない。小数?知らない子ですね。
整数しか扱えない世界線で割り算を行うとどうなるか、0方向に丸め込んだ結果を出してきます。例えば5÷3であれば2より1のほうが0に近いため1、-5÷3であれば-2より-1のほうが0に近いため-1が結果として出力されます。
まぁ、商はたしかに正しいかもしれませんが、余りもないですし算数・数学ができる皆さんは違和感を覚えるかもしれません。でもこれがint型。整数でしか表現できない悲しき定め。
では欲しい答えを得るためにはどうするか。選択肢は3つかな?
①割り切れないと教える
→クソアプリ作成のために今回やる
②余りも表示する
→演算子?として「%」を追加してそれも表示するboxを作る
③小数点以下まで表示する
→double型にする
って感じですかな。それじゃクソアプリを作りましょう。
コードはこんな感じ。余りが0でなかった場合に渾身の「割り切れないぜ!」を表示して、0だったら割った値を表示する。というわけで再度ポチッとな
出ましたね、渾身の「割り切れないぜ!」。ここでもう一個確認しときましょう。割れる場合なら?
ちゃぁんと割った値が出てきてくれましたね。めでたしめでたし。
何が!言いたいって!!言うんだ!!!
「え?おしまい?」、はいおしまいです。
言いたいことは、最初にも言いましたが「プログラムは融通が利かない」ということ。
こっちの求めていることを正確に記述しないと、プログラムは違った答えを返してくるかもしれません。でもこれでいいんです。
融通が利くプログラムなんて嫌でしょう?それこそ「あ、こう思ったんで勝手にこっちで解答変えときました!」なんてたまったもんじゃありません。
いつだってエラーを起こすのは自分が問題。ただ本当の問題は、エラーに気付かないこと。
今回具体例として挙げた四則演算クソアプリ、答えが1だろうとエラーは別に吐いてくれません。自分が気付かなければ間違ったままになってしまう。
上手くいっていると思ってもどこかに異変がないかと探す、感覚的には『8番出口』に近いか?良いゲームが配信されたものです。