なぜ、判定条件の理解が重要なのか、その理由
この記事では、当社の新人エンジニア研修の参考にC#を解説します。
前回は「演算子でプログラムに計算させる」について学びました。算術演算子、キャスト演算子などについて学びましたね。
今回は条件分岐と判定条件についてです。プログラムは条件によって処理を変えることができます。
たとえば駅の改札でICカードの残高をチェックしてゲートを開けるかどうか決めるように、人間の仕事を置き換える重要な仕組みです。
あわせて、前回触れられなかった
- 関係演算子(比較演算子)
- 三項演算子
- 論理演算子
についても解説します。
1. if
文
C#でも、if
文を使うことで、条件に応じて「処理をする / しない」を表現できます。
たとえば、「もし20歳以上ならお酒を飲む」のようなロジックです。

if(条件式) { ... }
using System;
namespace Chap04
{
public class Example01
{
public static void Main(string[] args)
{
int age = 20;
if (age >= 20)
{
Console.WriteLine("お酒を飲む");
}
}
}
}
if (age >= 20)
の 条件式 はbool
型の値(true
またはfalse
)を返す必要があります。- ここでは
age >= 20
がtrue
かどうかを評価し、true
なら{ ... }
のブロックが実行されます。 age = 20
の場合は「お酒を飲む」と出力。age = 19
の場合は何も出力しません。
2. 関係演算子(比較演算子)
関係演算子は、2つの式や値を比較し、結果を true
か false
で返します。よく使うものを挙げると:
演算子 | 読み方 | 例 | 結果 |
---|---|---|---|
== | イコールイコール | 1 == 1 | true |
!= | びっくりイコール | 1 != 2 | true |
> | 大なり | 1 > 2 | false |
< | 小なり | 1 < 2 | true |
>= | 大なりイコール | 1 >= 2 | false |
<= | 小なりイコール | 1 <= 2 | true |
=
は代入の意味なので、「等しい」は==
で表現します。
using System;
namespace Chap04
{
public class Example02
{
public static void Main(string[] args)
{
Console.WriteLine(1 == 1); // true
Console.WriteLine(1 != 2); // true
Console.WriteLine(1 > 2); // false
Console.WriteLine(1 < 2); // true
Console.WriteLine(1 >= 2); // false
Console.WriteLine(1 <= 2); // true
}
}
}
if
文の省略記法と注意点
if (age >= 20) Console.WriteLine("お酒を飲む");
このように1行だけならブロック { }
を省略してもOKですが、複数行に及ぶ場合は{}で囲みましょう。省略によって意図せず処理が外側に漏れてしまうバグを防ぐため、{}を付ける習慣を推奨します。
int age = 19;
if (age >= 20)
Console.WriteLine("お酒を飲む");
Console.WriteLine("たばこも吸う");
↑ この場合、2行目のみが if
の対象で、3行目は常に実行されます。
つまり age = 19
でも「たばこも吸う」が出力されてしまう。
3. if
- else
文
「もし20歳以上ならお酒を飲む。そうでなければジュースを飲む」のように、条件がfalseの場合に別処理を行いたいなら、else
を使います。

using System;
namespace Chap04
{
public class Example06
{
public static void Main(string[] args)
{
int age = 19;
if (age >= 20)
{
Console.WriteLine("お酒を飲む");
}
else
{
Console.WriteLine("ジュースを飲む");
}
}
}
}
20未満の場合は後者が実行されます。
if ... else if ... else ...
の多岐分岐
using System;
namespace Chap04
{
public class Example07
{
public static void Main(string[] args)
{
int score = 88;
if (score >= 90)
{
Console.WriteLine("A");
}
else if (score >= 80)
{
Console.WriteLine("B");
}
else if (score >= 70)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("D");
}
}
}
}
スコア90以上はA、80以上はB、70以上はC、それ以外はDと表示します。
条件が増えるほど
if-else
構文が長くなり可読性が下がるケースがあります。そのときに次で紹介するswitch
文が使えることもあります。
4. switch
文
C#のswitch
文は、ある式の値に応じて複数のケースに分岐できる文法です。
書式はおおむね次のようになります。
switch (式)
{
case 値A:
// 式が値Aの場合の処理
break;
case 値B:
// 式が値Bの場合の処理
break;
default:
// どのcaseにも当てはまらない場合の処理
break;
}
char
, byte
, short
, int
, string
、enum
を switch
文で使えます。
using System;
namespace Chap04
{
public class Example08
{
public static void Main(string[] args)
{
int score = 88;
switch (score / 10)
{
case 7:
Console.WriteLine("C");
break;
case 8:
Console.WriteLine("B");
break;
case 9:
case 10:
Console.WriteLine("A");
break;
default:
Console.WriteLine("D");
break;
}
}
}
}
score / 10
が8
の場合、Bと表示されます。score / 10
が9
または10
の場合はAと表示します(「フォールスルー」活用の一例)。
フォールスルー(breakを書かない場合)
switch (score / 10)
{
case 7:
Console.WriteLine("C");
case 8:
Console.WriteLine("B");
case 9:
case 10:
Console.WriteLine("A");
default:
Console.WriteLine("D");
}
break;
を書かないと、マッチした箇所から最後まで実行されるので、例えば、意図せずC, B, A, D... のように複数行が出力される可能性があります。C#は明示的なbreak
がないとフォールスルーしますので注意してください。
5. 三項演算子
三項演算子(?:
)を使うと、「もし条件式がtrueならA、falseならB」のようなコンパクトな条件分岐を表現できます。

using System;
namespace Chap04
{
public class Example10
{
public static void Main(string[] args)
{
char c = 'y';
// 三項演算子
string result = (c == 'y') ? "Yes" : "No";
Console.WriteLine(result);
}
}
}
<実行結果>
Yes |
c == 'y'
が true なら「Yes」、false なら「No」がresult
へ代入されます。
三項演算子は短い判定には有用ですが、複雑な入れ子や長大な式を作ると読みにくくなります。注意しましょう。
6. 論理演算子
論理演算子を使うと、複数の条件を組み合わせて複雑な真偽値を作ることができます。C#では以下の演算子が基本です。
演算子 | 読み方 | trueとなる条件 | 例 |
---|---|---|---|
&& | かつ(AND) | 左辺と右辺がともに true | gender == 'F' && age >= 16 |
|| | または(OR) | すくなくとも左辺と右辺のどちらかがtrue | gender == 'F' || age >= 16 |
! | 否定(NOT) | 条件式が false のとき true を返す | !(gender == 'F') |
^ | 排他的OR(XOR) | 左辺と右辺の一方のみが true (両方trueはfalse) | gender == 'F' ^ age >= 16 |
XORは使用頻度が低いので、まずは AND / OR / NOT を押さえましょう。
using System;
namespace Chap04
{
public class Example11
{
public static void Main(string[] args)
{
Console.WriteLine(true && true); // true
Console.WriteLine(true && false); // false
Console.WriteLine(true || false); // true
Console.WriteLine(!true); // false
Console.WriteLine(!false); // true
}
}
}
例:英語と数学の両方が80点以上ならS評価
using System;
namespace Chap04
{
public class Example12
{
public static void Main(string[] args)
{
int english = 80;
int math = 75;
if (english >= 80 && math >= 80)
{
Console.WriteLine("S");
}
else if (english >= 80 || math >= 80)
{
Console.WriteLine("A");
}
else if (english >= 70 || math >= 70)
{
Console.WriteLine("B");
}
else
{
Console.WriteLine("C");
}
}
}
}
実行結果の予想
english = 80
かつ math = 75
なので、最初の if
条件 (&&
) はfalse → 次の else if
(||
) はtrue → "A" 出力となります。
7. 演算子の優先順位
ここまで学んだ主な演算子の優先度は、算術演算子 > 関係演算子 > 論理演算子 の順です。
- 算術演算子(
+ - * / %
など)は、関係演算子(>
、==
など)より先に計算されます。1 + 1 > 2 - 1
→(1 + 1) > (2 - 1)
→2 > 1
→true
- 関係演算子は論理演算子(
&&
、||
)より先に評価されます。1 == 1 && 2 >= 1
→(1 == 1) && (2 >= 1)
→true && true
→true
さらに論理演算子の中では &&
が ||
より優先されます。
a > 10 && b < 5 || c == 0
は(a > 10 && b < 5) || c == 0
と解釈されます。
条件の否定
// a + 1 > b - 10 の否定は?
!(a + 1 > b - 10)
// カッコを開くと
a + 1 <= b - 10
- 不等号を逆にし、イコールの有無を反転させれば良いというルールです。
- 論理演算子を否定するときは
&&
↔||
も入れ替わるので注意が必要です。
次回は、「5章. 繰り返しで単純作業をコンピュータに任せる」を学びます。