5-2 場合わけ if文
ここでは前節で取り上げた基本三構造のひとつである、if文について の話です。
実生活においてもif文は多用されている
例えば、朝起きてから職場もしくは学校へ行くまでのことを想像してみてください。 目が覚めて時計を見ると、いつもの起床時間を1時間もオーバーしていました。 遅刻しないためには何をすればいいのかを考えてそれらを実行していくことに なりますが、そのとき意識的にif文が発生していることでしょう。 「朝ごはんはどうするか、パンなら食べて間に合いそうだが、ご飯では間に合わない、 だから、パンを食べながら行こう」とか「いつもは快速電車で行っているが、 間に合いそうもないので特急で行こう」など色々な分岐が存在することでしょう。 更にミクロな視点にたてば、刻一刻と過ぎていく時のなかで我々の生活は条件分岐 の連続ではないでしょうか。
このように我々の生活において条件分岐が多用されているからといって、プログラミング においても同じことが言えるのか?というと確かに、まったく同じではないでしょうが、 人間が作る以上、実生活で意識、無意識に関係なく行っている条件分岐が プログラミングの世界でも使えたらなぁと思うのは至極当然のことでしょう。 ということで、このif文というものがプログラミング独自の概念でなく、 ごく自然なものであることがわかってもらえたかと思います。
if文の基本3パターン
さて、前置きが長くなりましたが実際にC#におけるif文についてみていくことに しましょう。if文は基本的には2方向への分岐を行います。つまり、 「もし〜だったら〜をして、そうでなかったら〜をせよ」といった感じです。 また、これらを繰り返し用いることで多方向への分岐もすることができます。 次にC#で使うif文の基本的な3パターンを紹介します。
文
まず1つ目は「もし〜だったら〜をせよ」というものです。条件に合わなければ 何もせず次の実行へ移行します。日本語に解釈すると「もし(条件があったら)文を実行せよ」となります
文1
else
文2
2つ目は条件にあわなかったときの動作を指定するときに使います。日本語に解釈 すると「もし(条件があったら)文1を実行して、そうでなかったら文2を実行せよ」と いうことになります。
文1
else if(条件2)
文2
else
文3
3つ目は多方向への分岐です。日本語の解釈は 「もし(条件1にあったら)文1を実行し、そうでなかったら(条件2をみてあったら)文2 を実行し、どれにもあてはまらなかったら文3を実行せよ」ということになります。
文、条件とは?
これまでの説明のなかで条件とか文などというものが、何の説明もなしに書かれて いますが、これは一体何でしょうか。それぞれ簡単に説明していきます。
文には主に二つのものがあります。それは単純文と複合文です。単純文とはこれまで にもサンプルプログラムでいくつも見ていると思いますが、多くは行頭から セミコロン;までのことです。つまり、a = 10;などは単純文です。
一方複合文とはそれらがいくつか集合したもので、ひとつの文として扱われ ます。その集合を表すためにC#では中括弧{}を使用します。つまり、 { a = 10; b = 100; }などは複合文ということになります。
次に条件について考えてみます。通常プログラミングで条件というと、数学における それとよく似ています。例えば、AはBより小さいというと数学ではA<Bなどと 表現します。その他の比較演算子も殆ど同様ですが、一つ注意しなければならないのは AとBが同じ値のときです。数学ではA=Bと表現しますが、これはC#では代入の 意味になってしまいます。つまり、AにBを代入することになってしまいます。 従って、AとBが同じであることを表現するにはA==Bというようにイコールを 重ねてひつとつの記号として表現します。
条件に合致するとは?
if分の3パターンを紹介する際、日本語的な解釈を示しましたが、その中で ”条件にあったら”などと書きましたが、これは具体的にはどういった意味 なのでしょうか。例えば、次のような場合を考えて見ます。
a = -1;
else
b = -1;
これは「もしaがbより小さかったら、aに-1を代入して、そうでなかったらbに-1を 代入せよ」という処理になります。これでも十分if文を理解する上では問題ない のですが、もう少し詳しくみてみると、実はif文の条件部分は真か偽つまり、 trueかfalseの値しか入れることができません。ではa < bはどうなっているのか というと、if文で判定する前にまずaとbの値を比較します。そして、a < bが成立 しているようならば、a < b全体がtrueに変身するということです。従って、もし 次のようなif文を作ってしまうと文1は実行されません。
文1
else
文2
実際にif文を使ってみる
では、実際にif文を使用するために簡単な電卓を作ってみます。 Visual StudioでWindowsアプリケーションの新しいプロジェクトを 作成します。次にフォームにTextBoxやLabelを配置して下図のような フォームを作ってみましょう。基本的にコントロールの表面に でている文字を変更するにはTextプロパティの値を変更します。 Labelは文字を入力したら、AutoSizeプロパティをtrueに設定すると 自動的に大きさが調整されて便利です。
![]() |
|
TextBoxは左から順に上図のような名前に設定してあります。
|
次にコードを書いていきましょう。 ボタンをダブルクリックします。そして、次のようなコードを追加しましょう。
{
string op = textBox2.Text;
if(textBox1.Text != "" && textBox3.Text != "")
{
if(op == "+")
{
double x = double.Parse(textBox1.Text);
double y = double.Parse(textBox3.Text);
double result = x + y;
textBox4.Text = result.ToString();
}
else if(op == "-")
{
double x = double.Parse(textBox1.Text);
double y = double.Parse(textBox3.Text);
double result = x - y;
textBox4.Text = result.ToString();
}
else if(op == "*")
{
double x = double.Parse(textBox1.Text);
double y = double.Parse(textBox3.Text);
double result = x * y;
textBox4.Text = result.ToString();
}
else if(op == "/")
{
double x = double.Parse(textBox1.Text);
double y = double.Parse(textBox3.Text);
double result = x / y;
textBox4.Text = result.ToString();
}
else
{
textBox4.Text = "エラー:演算子が正しくありません";
}
}
else
{
textBox4.Text = "エラー:数値を記入してください";
}
}
できたら実行してみましょう。数値1、2にはそれぞれ演算する数値を入れて、 演算子には+、-、*、/のどれかを記入します。最後に計算ボタンをクリックします。 どうでしょう。正しい値が算出できたでしょうか?次に演算子を4つ以外のもの にしたり、数値をいれずに計算してみましょう。エラー文が表示されたでしょうか。
処理自体は単なる演算なので簡単なことです。ここでは条件に着目して説明 していきます。 まずif(textBox1.Text != "" && textBox3.Text != "")では数値1と数値2に 値が入っていることを確認しています。つまり、textBoxのTextプロパティ が空""でなかったらこれは成立します。!=の記号は数学でいうところのNot記号 (イコールに斜線をしたもの)に相当します。次に&&というのは textBox1.Text != ""が成立して”かつ”textBox3.Text != ""が成立しいた 場合全体がtrueになるということです。これでどちらか一方のTextBoxに 数値が記入されていなければその後のelse句が実行されて、エラー文 が表示されることになります。
次にそれぞれの演算子によって場合わけをしているのがわかると思います。 最後にどれにもあてはまらなかったときにはエラーが表示されることになります。
どうだったでしょうか。上記のサンプルプログラムも色々な課題を残しています。 例えば、数値以外の値が入力された場合などはエラーがでて終了してしまいます。 また、プログラム自体も同じような文がいくつもでてきて冗長な感じがします。 これらを一度改良してみるのも面白いかもしれません。
