この章のテーマ §
条件次第で別の機能を実行するifステートメントを学びます。
elseキーワードについても説明します。
前提知識 §
Console.Writeメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, 複文, 空文, for文
解説 §
条件によって動作を変えたいときがあります。たとえば、【キャンペーン商品なら値引きする】などの処理を行う時です。
そのような場合はifステートメントを使用できます。
ifステートメントは"if(条件式) 文"のように使い、条件式が真(true)の時だけ文を実行します。
条件式が成り立たないときは実行しません。
たとえば、if (a > b) 文ならば、bよりもaが大きい時だけ文を実行します。
elseキーワードを追加すると、条件不成立の時に実行する文も指定できます。
サンプルソースのelse使用例を見て下さい。
罠の数々 §
カッコの後に"if( 式 ); 文"とセミコロンを入れるとエラーにはなりませんが文は常に実行されて条件が判断されません。
こうなる理由は、セミコロンが空文という一つの文だからです。条件次第で何もしない空文を実行したりしなかったりしますが、実行しても何もしないので、結果は変化しません。この場合の後続する文はifステートメントと関係ない後続する文なので、常に実行されます。
また、"if(条件式1) if(条件式2) 文1 else 文2"というコードも要注意です。この場合のelseは後の方のifに対するelseとして機能しますが、しばしば前の方のifに対応するelseだと思い込んでバグを発生させることがあります。これを阻止するには波括弧を入れて複文扱いにすると良いでしょう。"if(条件式1) { if(条件式2) 文1 } else 文2"と書けばelseは最初のifに対応します。しかし、そもそも最初から紛らわしいif文を書かないのがお勧めです。
参考リンク §
選択ステートメント (C# リファレンス)
サンプルソース: kw_if §
int a = 1;
int b = 2;
// if文を使う・実行されないとき
if (a > b) Console.WriteLine("aはbより大きい。");
// if文を使う・実行されるとき
if (b > a) Console.WriteLine("bはaより大きい。");
// エラーにならないが間違った例
if (a > b) ; Console.WriteLine("aはbより大きい。(間違った例)");
// elseも使う
for (int i = 1; i < 3; i++)
{
if (i > 1)
{
Console.WriteLine($"変数i({i})は1より大きい。");
}
else
{
Console.WriteLine($"変数i({i})は1と同じか1より小さい。");
}
}
実行結果 §
bはaより大きい。
aはbより大きい。(間違った例)
変数i(1)は1と同じか1より小さい。
変数i(2)は1より大きい。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
for (int i = 0; i < 3; i++)
{
if (i == 0) Console.Write("One, ");
else if (i == 1) Console.Write("two, ");
else Console.WriteLine("Three");
}
[[解答]]