プログラムは通常、上から下へ順番に処理が実行されますが、それだけでは単純な動きしかできません。「もしAならばXを実行し、そうでなければYを実行する」というように、状況に応じて処理の流れを変える仕組みが必要です。
この「条件に応じて処理の流れを変える」ことを制御構文と呼び、その中でも代表的な分岐処理について、この記事では詳しく解説します。C#における分岐処理の基本であるif
文とswitch
文をマスターしていきましょう。
if
文 ― 分岐処理の基本
if
文は、最も基本的で最もよく使われる分岐処理です。「もし(if)条件が真(true)ならば、特定の処理を実行する」という動きをします。
基本的なif
文
if
の後ろの ()
内に条件式を書き、その条件が満たされた(真/true
)場合に {}
内の処理が実行されます。
int score = 85;
// もし score が 60以上 ならば
if (score >= 60)
{
Console.WriteLine("合格です!");
}
この例では、score >= 60
という条件式が true
になるため、「合格です!」と表示されます。
条件を満たさない場合の処理 else
if
の条件を満たさなかった(偽/false
)場合の処理を書きたいときは、else
を使います。
int score = 45;
if (score >= 60)
{
Console.WriteLine("合格です!");
}
else
{
// ifの条件式がfalseだった場合にこちらが実行される
Console.WriteLine("不合格です。");
}
この例では、score >= 60
が false
になるため、else
ブロックの中の「不合格です。」が表示されます。
複数の条件を判定する else if
「Aの場合は処理1、AではないがBの場合は処理2、どちらでもない場合は処理3」のように、複数の条件で分岐させたい場合はelse if
を使います。
int score = 75;
if (score >= 90)
{
Console.WriteLine("評価S");
}
else if (score >= 80)
{
Console.WriteLine("評価A");
}
else if (score >= 70)
{
Console.WriteLine("評価B");
}
else
{
Console.WriteLine("評価C");
}
この例では、score >= 90
はfalse
ですが、次のscore >= 80
もfalse
です。その次のscore >= 70
がtrue
になるため、「評価B」と表示され、それ以降のelse
は実行されません。
switch
文 ― 選択肢が多い場合の分岐
switch
文は、一つの変数が特定の値と一致するかどうかで処理を分岐させたい場合に便利です。長いif-else if
文をよりシンプルに記述できます。
基本的なswitch
文
switch
で変数を指定し、case
でその変数が取りうる値を記述します。各case
の終わりには必ずbreak;
が必要です。
int menuChoice = 2;
switch (menuChoice)
{
case 1:
Console.WriteLine("ポーションを選択しました。");
break; // breakを忘れないように注意
case 2:
Console.WriteLine("エリクサーを選択しました。");
break;
case 3:
Console.WriteLine("やくそうを選択しました。");
break;
}
いずれのcase
にも当てはまらない場合 default
どのcase
にも一致しなかった場合の処理は、if
文のelse
に相当するdefault
を使って記述します。
int menuChoice = 99;
switch (menuChoice)
{
case 1:
Console.WriteLine("ポーションを選択しました。");
break;
case 2:
Console.WriteLine("エリクサーを選択しました。");
break;
default:
// case 1, 2 のどちらでもなかった場合に実行される
Console.WriteLine("メニューにない項目です。");
break;
}
条件式で使う主な演算子
if
文の ()
の中で使われる条件式には、様々な比較演算子や条件演算子が利用できます。
等値演算子 ==
と 非等値演算子 !=
==
: 左辺と右辺が等しい場合にtrue
!=
: 左辺と右辺が等しくない場合にtrue
string password = "abc";
if (password == "abc")
{
Console.WriteLine("パスワードが一致しました。");
}
if (password != "123")
{
Console.WriteLine("パスワードが違います。");
}
関係演算子 <
, >
, <=
, >=
数値の大小を比較します。
<
: 左辺が右辺より小さい>
: 左辺が右辺より大きい<=
: 左辺が右辺以下>=
: 左辺が右辺以上
int age = 20;
if (age >= 20)
{
Console.WriteLine("成人です。");
}
条件演算子 &&
と ||
複数の条件式を組み合わせるために使います。
&&
(AND) :A && B
→ AかつB。両方の条件がtrue
のときだけ全体がtrue
になります。
int level = 10;
bool hasKey = true;
// レベルが10以上、かつ、鍵を持っている場合
if (level >= 10 && hasKey == true)
{
Console.WriteLine("ダンジョンの扉を開いた!");
}
||
(OR) :A || B
→ AまたはB。どちらか一方でもtrue
なら全体がtrue
になります。
bool isHoliday = false;
bool isSunday = true;
// 休日、または、日曜日の場合
if (isHoliday == true || isSunday == true)
{
Console.WriteLine("お店は休みです。");
}
まとめ
今回は、プログラムの流れを制御する条件分岐について学びました。
if
,else if
,else
は、柔軟な条件で処理を分岐させたい場合に使う。switch
は、一つの変数が特定の値と一致するかで分岐させたい場合に使うとコードが綺麗になる。==
,!=
,<
,&&
,||
などの演算子を組み合わせて、複雑な条件式を作ることができる。
条件分岐は、ユーザーの入力に応じて動作を変えたり、ゲームのキャラクターの状況を判断したりと、あらゆるプログラムで使われる必須の知識です。ぜひ色々な条件を試してみてください。