タブレットPC開発入門 C#編 第9回 制御文 その1(if文、for文)

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2002年11月12日(火)版

タブレットPC開発入門 C#編 第9回 制御文 その1(if文、for文)

デスクトップ、ノートブックから、第3のスタイルへ


■制御文を知ろう

 ここまでにあなたは基本的なコントロールの使い方も学んだ。しかしながら、実用的なアプリケーションを作成するためには制御文を知らなければならない。制御文とはいわゆるif文、for文、while文等である。

■変数って何?

 制御文の前にまず変数と言う言葉を聞いたことがあるだろうか。この連載でもこれまでにさりげなく変数と言う言葉を使ってきたが、ちゃんと解説していなかった。変数と言うのは情報を入れておく入れ物のことで、それぞれの型によって格納できるものが決まっている。

 例えば、int型には数値情報しか格納することができないし、string型には文字列情報しか格納することができない。bool型に至ってはtrueかfalseしか格納することができない。え?string型にも"123"等の数値を入れたよ、と既に自分でいろいろ試してみた方は思われたかもしれない。確かに人間が見るときはどちらも同じ"123"である。

 しかしながら、それは文字列としての"1"と"2"と"3"の文字コードの情報が格納されたのであって、string型に数値そのものつまり16進値で表すと0x7bという値が格納されたのではない。

 また、int型はメモリ上のサイズが32ビット=4バイトであり、それによって格納できる数値の範囲は-2,147,483,648〜2,147,483,647に制限される。bool型はメモリ上のサイズが16ビット=2バイトである。string型のサイズはもう少し話が難しくなるが、おそらくstring型そのもののサイズは一定で、内部で動的に文字列用のメモリ領域を確保していると思われる。

 変数にはいろいろな型があるのだが、int型、bool型、string型の他、浮動小数点数を格納するdouble型ぐらいを押さえておけばほとんど事足りるし、それぞれの型は容易に相互に変換できる。

■if文

 いくつかある制御文の中でもif文は最も重要である。なぜならこの制御文だけは他で置き換えることができないからだ。例えば、この後解説するfor文は繰り返しの制御を行う文だが、10回繰り返す処理なら最悪は10回同じコードを書けば良い。もしあなたがCかJavaの経験があるなら、C#の制御文はそれらとほとんど同一であるので、この回は読み飛ばしていただいても構わない。

 if文はこんなケースを考えれば良い。あなたがあるゲームの発売日にある店の行列に並んだとする。もし、首尾よくお目当てのゲームを手に入れることができたなら、あなたは速攻で帰宅して、そのゲームに没頭するだろう。不幸にもお目当てのゲームを手に入れることができなかったとすれば、心当たりのある他の店を探すことになる。

 これをプログラムで実現するためのものがif文である。せっかくだからFormを使って実際に上記の例を書いてみよう。新たにFormアプリケーションを作成する。Formが表示されたらRadioButtonを2つ貼り付け、一方のTextプロパティには「ゲームを買えた」、他方のTextプロパティには「ゲームを買えなかった」を設定する。「ゲームを買えた」のRadioButtonは予めチェックしておくためにCheckedプロパティをTrueに設定する。

 次に、Buttonを貼り付け、そのClickイベントに以下を記述する。


if(radioButton1.Checked)
{
MessageBox.Show("おめでとう!");
}
else
{
MessageBox.Show("残念!他の店へ");
}

 アプリケーションを開始して動作を確かめてみよう。「ゲームを買えた」が選択されていれば、ボタンが押されたときに「おめでとう!」と表示され、「ゲームを買えなかった」が選択されているときは「残念!他の店へ」と表示されるはずだ。

 ifで判定する変数或いは式を評価した結果が真ならばif節を実行し、偽ならばelse節を実行する。if節及びelse節は必ずしも{}で囲ってブロックにする必要はないが、僕の経験上ブロックにしておいたほうがバグは入り込みにくくなるし、見つけやすくなるのでブロックにすることをおすすめする。

 判定すべきことが複数ある場合、以下のようにelse if節を書くことができる。


if(num == 0)
{
Cosole.WriteLine("0です");
}
else if(num < 0)
{
Console.WriteLine("負数です");
}
else
{
Console.WriteLine("正数です");
}

 else if節及びelse節は必要がなければ省略しても良い。

■for文

 for文は繰り返し処理を行うときに使用する。例えば1〜10まで加算する処理を書くとき、Visual Basicでは


For i = 1 to 10
sum = sum + i
Next i

 のように書くと思うがC#では以下のように書く。


for(i = 0;i < 10;i++)
{
sum += i + 1;
}

 これはiの初期値=0でiが10未満の間処理をし、iは1ずつ加算していくと言う意味である。つまりiは0〜9までとなる。故にsumに加算するときに1を足しているのである。もちろんこれをそのまま以下のように書いても良い。


for(i = 1;i <= 10;i++)
{
sum += i;
}

今度はiの初期値=1でiが10以下の間処理をしているが結果は同じである。どちらで書くかはほとんど個人のセンスの問題なのだが、C系の言語では配列が0から始まるために、どちらかと言うと前者の書き方が多いように思う。しかし、どちらが正解と言うわけではないのでケースバイケースで対応して欲しい。

 for文も実際に書いてみよう。第3回で作成したCommandLineアプリケーションをコマンドラインの引数がいくつでも表示できるように変更を加える。Mainメソッドで以下のように書いてみて欲しい。


static void Main(string[] args)
{
//
// TODO: アプリケーションを開始するコードをここに追加してください。
//
Console.WriteLine("Length=" + args.Length);
for(int i = 0;i < args.Length;i++)
{
Console.WriteLine("args[" + i + "]=" + args[i]);
}
}

 これでコマンドラインの引数がいくつであろうと、異常終了あるいは引数が表示されないと言ったことはなくなる。上記の例ではfor文中で変数iの宣言も同時に行っているが、このような書き方もできてしまう。これは余談になるがiのような変数を制御変数と呼ぶ。覚えておいても損はないだろう。

 CommandLineアプリケーションの場合はIDEから実行するよりも、コマンドプロンプトから実行するほうがいろいろ試せて良い。最初のバージョンではコマンドラインの引数が1つでないと正常に動作しなかったと思うが、このバージョンではコマンドライン引数は何個でも正常に動作する。

■おさらいは次回まとめて

 本当は今回だけでさっと制御文の解説を終わらせるつもりだったのだが、少し熱が入ってしまったので2回に分けることにした。

 それでは次回。

 なお、今回も完全なソースを下記からダウンロードすることができる。ぜひ、ダウンロードして自分の環境でも実行してみてほしい。それが理解への最大の近道だからだ。
if文のサンプル

CommandLineアプリケーション(最終版)




タブレットPC開発入門 C#編 第9回 制御文 その1(if文、for文)

Reported by Allergy


Last-modified: Sun, 24 May 2009 23:45:30 JST (3462d)