[C#] if文で複数条件を扱う方法
C#でif
文を使用して複数の条件を扱うには、論理演算子を用います。
主に使用される論理演算子には、&&
(AND)、||
(OR)、および!
(NOT)があります。
&&
はすべての条件が真の場合に真を返し、||
は少なくとも一つの条件が真であれば真を返します。
!
は条件の真偽を反転させます。
例えば、if (a > 0 && b < 10)
は、a
が0より大きく、かつb
が10未満である場合に真となります。
条件を組み合わせることで、複雑な条件判定が可能です。
複数条件を扱う論理演算子
C#では、条件分岐を行う際に複数の条件を組み合わせて評価することができます。
これを実現するために、論理演算子を使用します。
ここでは、AND演算子、OR演算子、NOT演算子の使い方について詳しく説明します。
AND演算子(&&)の使い方
AND演算子&&
は、複数の条件がすべて真である場合にのみ、全体の条件を真と評価します。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int age = 25;
bool hasLicense = true;
// 年齢が18以上で、かつ運転免許を持っている場合
if (age >= 18 && hasLicense)
{
Console.WriteLine("運転が可能です。");
}
else
{
Console.WriteLine("運転はできません。");
}
}
}
運転が可能です。
この例では、age
が18以上であり、かつhasLicense
がtrue
である場合に「運転が可能です。」と表示されます。
どちらか一方でも条件を満たさない場合は「運転はできません。」と表示されます。
OR演算子(||)の使い方
OR演算子||
は、複数の条件のうち少なくとも一つが真である場合に、全体の条件を真と評価します。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
bool isWeekend = true;
bool isHoliday = false;
// 週末または祝日の場合
if (isWeekend || isHoliday)
{
Console.WriteLine("今日は休みです。");
}
else
{
Console.WriteLine("今日は仕事です。");
}
}
}
今日は休みです。
この例では、isWeekend
がtrue
であるため、「今日は休みです。」と表示されます。
isHoliday
がtrue
であっても同様に「今日は休みです。」と表示されます。
NOT演算子(!)の使い方
NOT演算子!
は、条件の真偽を反転させます。
つまり、条件が真であれば偽に、偽であれば真にします。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
bool isRaining = false;
// 雨が降っていない場合
if (!isRaining)
{
Console.WriteLine("傘は必要ありません。");
}
else
{
Console.WriteLine("傘を持って行きましょう。");
}
}
}
傘は必要ありません。
この例では、isRaining
がfalse
であるため、!isRaining
はtrue
となり、「傘は必要ありません。」と表示されます。
isRaining
がtrue
であれば、「傘を持って行きましょう。」と表示されます。
複数条件の組み合わせ
C#では、複数の条件を組み合わせてより複雑な条件式を作成することができます。
ここでは、AND演算子とOR演算子の組み合わせ、条件のネスト、複雑な条件式の整理方法について説明します。
ANDとORの組み合わせ
AND演算子&&
とOR演算子||
を組み合わせることで、複雑な条件を表現することができます。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int age = 20;
bool hasLicense = true;
bool isStudent = false;
// 年齢が18以上で、かつ運転免許を持っている、または学生である場合
if ((age >= 18 && hasLicense) || isStudent)
{
Console.WriteLine("特別な割引が適用されます。");
}
else
{
Console.WriteLine("割引は適用されません。");
}
}
}
特別な割引が適用されます。
この例では、age
が18以上でhasLicense
がtrue
であるため、条件式全体が真となり、「特別な割引が適用されます。」と表示されます。
isStudent
がtrue
であれば、他の条件が偽でも割引が適用されます。
複数条件のネスト
条件をネストすることで、より詳細な条件分岐を行うことができます。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int score = 85;
bool hasExtraCredit = true;
// スコアが80以上の場合
if (score >= 80)
{
// 追加クレジットがある場合
if (hasExtraCredit)
{
Console.WriteLine("成績はAです。");
}
else
{
Console.WriteLine("成績はBです。");
}
}
else
{
Console.WriteLine("成績はCです。");
}
}
}
成績はAです。
この例では、score
が80以上であり、hasExtraCredit
がtrue
であるため、「成績はAです。」と表示されます。
条件がネストされているため、スコアが80以上でない場合は「成績はCです。」と表示されます。
複雑な条件式の整理方法
複雑な条件式を整理するためには、以下の方法を考慮することが重要です。
- カッコを使用する: カッコを使って条件の優先順位を明確にすることで、意図しない評価を防ぎます。
- 変数に分ける: 複雑な条件を一度に書くのではなく、部分的な条件を変数に分けて可読性を向上させます。
- コメントを追加する: 条件の意図を明確にするために、適切なコメントを追加します。
以下に、これらの方法を用いたサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int age = 30;
bool hasLicense = true;
bool isEmployed = false;
// 年齢が18以上で運転免許を持っているか、雇用されている場合
bool isEligibleForDiscount = (age >= 18 && hasLicense) || isEmployed;
if (isEligibleForDiscount)
{
Console.WriteLine("割引が適用されます。");
}
else
{
Console.WriteLine("割引は適用されません。");
}
}
}
割引が適用されます。
この例では、isEligibleForDiscount
という変数を使用して条件を整理し、可読性を向上させています。
条件の意図を明確にするために、コメントも追加されています。
条件式の評価順序
C#における条件式の評価順序は、プログラムの動作を正しく理解するために重要です。
ここでは、演算子の優先順位、カッコを使った優先順位の変更、短絡評価の仕組みについて説明します。
演算子の優先順位
C#では、演算子にはそれぞれ優先順位があり、優先順位が高い演算子が先に評価されます。
以下は、一般的な演算子の優先順位を示した表です。
優先順位 | 演算子 | 説明 |
---|---|---|
高 | ! | 論理否定 |
* , / , % | 乗算、除算、剰余 | |
+ , - | 加算、減算 | |
< , > , <= , >= | 比較演算子 | |
== , != | 等価演算子 | |
&& | 論理積(AND) | |
低 | || | 論理和(OR) |
この優先順位に従って、条件式が評価されます。
例えば、a + b * c
はb * c
が先に計算され、その後にa
が加算されます。
カッコを使った優先順位の変更
カッコを使用することで、演算子の優先順位を明示的に変更することができます。
カッコ内の式は、他の演算子よりも優先して評価されます。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int a = 5;
int b = 10;
int c = 15;
// カッコを使って優先順位を変更
int result1 = a + b * c; // 5 + (10 * 15)
int result2 = (a + b) * c; // (5 + 10) * 15
Console.WriteLine("result1: " + result1);
Console.WriteLine("result2: " + result2);
}
}
result1: 155
result2: 225
この例では、result1
はb * c
が先に計算され、result2
はa + b
が先に計算されます。
カッコを使うことで、計算の順序を明確に指定できます。
短絡評価の仕組み
短絡評価(ショートサーキット評価)とは、論理演算子&&
および||
を使用した条件式において、左側の条件だけで結果が決まる場合に、右側の条件を評価しない仕組みです。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
bool isTrue = true;
bool isFalse = false;
// 短絡評価の例
if (isFalse && CheckCondition())
{
Console.WriteLine("この行は表示されません。");
}
if (isTrue || CheckCondition())
{
Console.WriteLine("この行は表示されます。");
}
}
static bool CheckCondition()
{
Console.WriteLine("CheckConditionが呼び出されました。");
return true;
}
}
この行は表示されます。
この例では、isFalse && CheckCondition()
の条件式において、isFalse
がfalse
であるため、CheckCondition()
は呼び出されません。
一方、isTrue || CheckCondition()
の条件式では、isTrue
がtrue
であるため、CheckCondition()
は呼び出されずに「この行は表示されます。」と表示されます。
短絡評価により、不要な計算を省略することができます。
応用例
複数条件を使ったif文は、さまざまな場面で応用することができます。
ここでは、ユーザー認証、データフィルタリング、ゲームロジックにおける応用例を紹介します。
複数条件を使ったユーザー認証
ユーザー認証では、ユーザー名とパスワードの両方が正しいかどうかを確認する必要があります。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
string username = "admin";
string password = "1234";
// 入力されたユーザー名とパスワード
string inputUsername = "admin";
string inputPassword = "1234";
// ユーザー名とパスワードが一致するか確認
if (inputUsername == username && inputPassword == password)
{
Console.WriteLine("ログイン成功");
}
else
{
Console.WriteLine("ログイン失敗");
}
}
}
ログイン成功
この例では、入力されたユーザー名とパスワードが正しい場合に「ログイン成功」と表示されます。
どちらか一方でも間違っている場合は「ログイン失敗」と表示されます。
複数条件を使ったデータフィルタリング
データフィルタリングでは、複数の条件を組み合わせてデータを選別することができます。
以下にサンプルコードを示します。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 10, 15, 20, 25, 30 };
// 10以上かつ20以下の数値をフィルタリング
foreach (int number in numbers)
{
if (number >= 10 && number <= 20)
{
Console.WriteLine("フィルタリングされた数値: " + number);
}
}
}
}
フィルタリングされた数値: 10
フィルタリングされた数値: 15
フィルタリングされた数値: 20
この例では、リスト内の数値のうち、10以上かつ20以下の数値がフィルタリングされて表示されます。
複数条件を使ったゲームロジック
ゲームロジックでは、プレイヤーの状態やゲームの進行状況に応じて複数の条件を評価することが重要です。
以下にサンプルコードを示します。
using System;
class Program
{
static void Main()
{
int playerHealth = 50;
bool hasShield = true;
bool isInSafeZone = false;
// プレイヤーが生存しているかどうかを確認
if ((playerHealth > 0 && hasShield) || isInSafeZone)
{
Console.WriteLine("プレイヤーは生存しています。");
}
else
{
Console.WriteLine("プレイヤーは敗北しました。");
}
}
}
プレイヤーは生存しています。
この例では、プレイヤーの体力が0より大きく、シールドを持っているか、安全地帯にいる場合に「プレイヤーは生存しています。」と表示されます。
どちらの条件も満たさない場合は「プレイヤーは敗北しました。」と表示されます。
複数条件を使うことで、ゲームの複雑なロジックを実現できます。
まとめ
この記事では、C#におけるif文での複数条件の扱い方について、論理演算子の使い方や条件式の評価順序、応用例を通じて詳しく解説しました。
これにより、複雑な条件を効率的に組み合わせて評価する方法を学び、実際のプログラムに応用するための基礎を築くことができたでしょう。
これを機に、実際のプロジェクトで複数条件を活用し、より洗練されたコードを書いてみてはいかがでしょうか。