【C#入門】第6回 条件文について【じゃんけんゲームを作ろう その6】

2021年8月12日

こんにちは。ノムノムです。

前回は変数をやりました。

【C#入門】第5回 変数について【じゃんけんゲームを作ろう その5】
【C#入門】第5回 変数について【じゃんけんゲームを作ろう その5】
こんにちは、ノムノムです。 前回は、代入を勉強しました。 今回は変数です。 変数は値を使いまわしたり、パラメー…
http://nomux2.net/variable/

今回は、条件文です。条件文は分岐や繰り返しといった処理に使えます。

たとえば100回繰り返す命令を出したいとして、100回同じ文章を書くのはナンセンスです。

くり返し文を使えば同じ命令文を使いまわせます。条件分岐と組み合わせれば50回目は違う命令文なんてこともできます。

条件文

「もし(条件)の時、(処理)をする。」とか「(条件)まで(処理)を繰り返す」など特定の条件下で処理が動く命令文のことです。

条件式について

条件文は条件式に沿って処理が変化します。

条件式というのは結果がbool型になる式、つまり真(true)か偽(false)かになります。
簡単に言えば合ってるか違ってるかです。

比較演算子

比較演算子とは演算結果が必ず真(true)か偽(false)になります。

a == ba と b が同じ値の時、trueを返します。それ以外はfalseです。
a != b a と b が異なる値の時、trueを返します。それ以外はfalseです。
a > b a より b が小さい値の時、trueを返します。それ以外はfalseです。
a < b a より b が大きい値の時、trueを返します。それ以外はfalseです。
a >= b a が b 以上の値の時、trueを返します。それ以外はfalseです。
a <= b a が b 以下の値の時、trueを返します。それ以外はfalseです。

演算子なんていうくらいだから、こんな使い方もできます。

bool a = b == c;

つまり、b と c を比較して同じだったらaにはtrueが違ったらfalseが入ります。
あまりこんな使い方はしませんけどね。

代表的な条件文

条件文には主に条件分岐をするif文、swtich文、繰り返しを行うfor文、while文などがあります。それぞれ説明します。

if文(条件分岐)

if文は以下のように書きます。


if (条件式) 
{
    条件式が正しい場合
} else {
    条件式ではない場合
}

if文とはもし条件式の通りなら「条件式が正しい場合」の処理、それ以外は「条件式が正しくない場合」の処理を行う条件文のことです。


例を書きます。変数a が 偶数の場合 変数bに+1 それ以外(奇数)の場合に変数cに+1してみます。


int a = 2;
int b = 0;
int c = 0;

if (a % 2 == 0)
{
    b = b + 1;                  //カウントアップ  b++;   でも   c += 1; でもいいです。
} else {
    c = c + 1;                  //カウントアップ  c++;   でも   c += 1; でもいいです。
}

条件式を見てみましょう。「a % 2」とあります。これは「a ÷ 2 の余り」を求める演算子です。比較演算子より先に計算されます。

先に「2 == 0」が計算されないの?と心配の場合は、明示的に以下のように書いてもわかりやすくていいと思います。

if ((a % 2) == 0)

つまり 変数aを2で割った余りが0の場合「偶数」、それ以外(余りが1)の場合「奇数」になるという条件分岐でした。

swtich 文(条件分岐)

swtich文は以下のように書きます。


switch(値0)
{
    case 値1:
        値0 と 値1が等しい場合の処理
        break;
    case 値2:
        値0 と 値2が等しい場合の処理
        break;
    case 値3:
        値0 と 値3が等しい場合の処理
        break;
    case 値4:
        値0 と 値4が等しい場合の処理
        break;
       ・
       ・
       ・
    default:
        条件に当てはまらなかった処理
        break;
}

swtich文を使うときは値同士の型を必ず同じにしなくてはいけません。値0の部分をintで宣言した変数をおくなら、case部分の値もint型にしなくてはいけないというルールです。

breakというのは、直近の処理を抜けることを意味します。この場合swtich文から抜けます。
例を出しましょう。変数に含まれる文字列の先頭部分で処理を分岐させてみます。


string a = "あいうえお";
int b = 0;

//変数aの先頭の一文字を取得する
string a_top = a.Substring(0, 1);

switch(a_top)
{
    case "あ":
        b = 1;
        break;
    case "か":
        b = 2;
        break;
    case "さ":
    case "た":
    case "な":
        b = 3;
        break;
    default:
        b = -1;
        break;
}

これで変数aの先頭の文字が「あ」の時は1、「か」の時は2、「さ」「た」「な」の場合は3、それ以外は-1が変数bに格納されます。

イメージとしてはswitchの部分の値と同じcaseの値までジャンプするという感じですかね。breakしないと後続の処理を巻き込みます。break忘れのバグって結構見かけたりします。注意しましょう。

まとめ

本当は繰り返し文までやりたかったのですが、長くなってきてしまいましたのでここでいったん切ろうかと思います。

繰り返し文までできるとソースコードは汚くても、とりあえず動かせるプログラムを作るレベルまでいけます。

じゃんけんゲームにあまり手を入れていないのでここいらで一気に進めたいと考えています。
がんばりましょう

【C#入門】第7回 繰り返しについて【じゃんけんゲームを作ろう その7】
【C#入門】第7回 繰り返しについて【じゃんけんゲームを作ろう その7】
こんにちは。ノムノムです。 前回は条件文をやりました。 今回は繰り返し文をやります。 繰り返し文 繰り返しって…
http://nomux2.net/loop/