勢いで電卓一通り作っちゃいます。
小数点の扱い
オブジェクト指向はやっぱりすばらしいですね。IDEのアシストがあれば、カンでいくらでもかけます。仕事でやってる場合はカンでかいちゃまずいでしょうけど。
else if (sender == Dot) { if (!textBox1.Text.Contains(".")) { textBox1.Text += "."; } }
ラダーに以上のif文を追加しました。数字に小数点は複数はいらないので、一回だけしか入力できないっていうコードです。カンで、しかも10秒で書けちゃいました。C言語なら、標準関数の名前からシグニチャから全部調べなおさないと書けません。そのくらい覚えてろって言われるでしょうけど。文字列を扱うメソッドはたいていStringクラスが持っている、オブジェクト指向が持つこのルールが如何にすばらしいかということであります。
繰り返しになりますが、遊びならいいけど、仕事では調べずに書くなんてことは許されないので、もしかするとこんな楽じゃまずいのかもしれません。
繰り返しになりますが、遊びならいいけど、仕事では調べずに書くなんてことは許されないので、もしかするとこんな楽じゃまずいのかもしれません。
文字列の数値化
いよいよ計算に行きましょう。
まず、文字列を数値に直さなければならないと思います。多分。
DoubleクラスにTryParse()なるスタティックメソッドがあるようなので試してみましょう。
まず、文字列を数値に直さなければならないと思います。多分。
DoubleクラスにTryParse()なるスタティックメソッドがあるようなので試してみましょう。
double parse;
Double.TryParse(textBox1.Text, parse);
……エラーがでた。なんじゃこりゃ?
'double.TryParse(string, out double)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
エラーを右クリックしてみると、なんだかヘルプを見れるようなので、見てみる。うーん。引数が間違っている、と。んなことはエラーメッセージでわかります。それだけ初歩的なエラーであるということですな。
もうひとつ、付随するエラーメッセージはこちら。
引数 '2' は 'out' キーワードと共に渡されなければなりません。
たしかに、TryParse()の第二引数は、パラメータヒントでout doubleとなっていました。outはよくわからないので、「outというくらいだから、自動的に参照渡しになったりする?」と都合よく解釈したのですが、そうではなかったようです。ヘルプを見ると、outのほかにrefというのもあるようです。ヘルプはrefとoutの解説にリンクされているようなのでそっちも見てみます。
ヘルプはごちゃごちゃ書いてあるので、要約します。outやrefをつけると参照渡しになります。refとoutの違いは、refは渡す前に初期化が必要で、outは必要ないってこと。あーrefってinoutのことっすか。おk。
で、引数を渡すときも、refとかoutとかつけないとだめみたい。ご使用防止ですね。
結局こうしたら大丈夫になりました。
結局こうしたら大丈夫になりました。
double parse;
Double.TryParse(textBox1.Text, out parse);
仕上げ
大体動くようになりました。
- ボタンを認識して処理を呼べるようになった。
- テキストボックスに文字を表示できるようになった。
- テキストボックスから文字を読み込んで、数値に変換できるようになった。
これだけできればあとはロジックだけなので、省略。
ロジック組みあがったやつをアップロードしておきます。
まだまだ、手直しすれば新しい要素を学べそうな気がします。列挙体とかもそうだし、クラスやメソッドを追加することもできそうです。
まとめ
エラーメッセージを右クリックしてエラーのヘルプを表示を選ぶと、ヘルプが見られる。
refやoutという引数の修飾子がある。メソッド定義と呼び出しの両方で修飾子を書く必要がある。
outは戻り値として、refは引数かつ戻り値として、使える。
おまけ:あとで気づいて0割りしてみたんですが、なんと∞が表示されますね。すばらすぃ。