今からはじめるプログラミング22
電卓のバグがわからない、、、
とりあえず昨日のバグ?でそもそも「=」を押して計算をするのが電卓の挙動、ということを忘れていまして。
それを追加しました。
それに伴い、「+」とか「ー」を入力した時点では、どの計算を行うかを保存して、「=」が押されたタイミングで計算をする、という機能の流れを整理して、コーディング・・・はうまくいき。。。ついでに、普通の電卓にはなさそうな、機能である「!」というのを追加しました。
「!」は「階乗」というやつです。
詳しくはメソッドの計算を参照してください。
あとこの「!」にのみ「ToolTipText」というまぁマウスカーソルをもっていくと表示されるテキストの実装をしています。。。メソッドを呼ぶだけなんですが。
こんな感じで、今更ながら、電卓なんて自作したってしょうがないwとは言わずに、自分だけの機能をもった電卓をつくるのはいかがでしょうか?
階乗機能付き電卓
そうそう、書いてないプログラミングのコツがあったので、こんなところで書いてみると、この電卓のようにボタンはたくさんあるけれど、テキストフィールドがひとつ、というような、なんというかすくないユーザーインターフェースをプログラムないで共用する場合、(そうでないばあいでも、ですね。文字数が稼げる文章?)変数のスコープはなるべく小さくすると、バグが少なくなります。
要するに共用する部分は絞ってコーディングするといたずらなバグを作り込まなくてすむ、ということです。
クラスの属性としての変数は最小限、この電卓の機能なら値を保持する文字列と指示を保持する文字列のみで、行けそうですが、画面の参照をもつようにしてしまっています。
バグが少なくなるのは、根拠がきちんとあって、共用するということは、いろんな利用がされる、つまり、想定外の操作が行える。ということです。障害を引き起こす原因になりますよね。
またこのブログで作っているスタンドアろんのアプリではなく、WEBアプリケーションになると、その変数のスコープの条件がさらに増えます。ユーザーがそのサイトを訪れてから離れていくまでのスコープだったり、一度のリクエストからレスポンスが返されるまでだったり、リクエストの中で飲み、レスポンスで中でのみ、という感じで、クラスの属性としてのスコープを超えて、「データ」がどの範囲で利用されているのかを考えなくてはいけないです。
そしてプログラムの範疇を超えるということは、環境に影響を与える(プログラムの中でも影響はあるのですが)、つまり具体的にパソコンのメモリに影響を大きく利用することもあり、データとしてなるべく少なくする必要性も出てきます。
そういうわけで必要最小限のスコープを意識した変数の利用を考えてコーディングすることはバグの少ないプログラム、システムを構築することにつながるわけですね。