If vs. Switch Comparison
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 10/66。
C# は、複数の条件を処理するための主な方法を 2 つ提供します:if-else 文と switch 文。それぞれが異なる状況で強みを持っています。
if-else 文は柔軟で、あらゆる種類の条件を扱うことができます:
string grade = "B";
if (grade == "A")
{
Console.WriteLine("Excellent");
}
else if (grade == "B")
{
Console.WriteLine("Good");
}
else if (grade == "C")
{
Console.WriteLine("Satisfactory");
}
else
{
Console.WriteLine("Needs improvement");
}switch 文は、単一の変数を複数の定数値に対して比較する際に、よりクリーンです:
string grade = "B";
switch (grade)
{
case "A":
Console.WriteLine("Excellent");
break;
case "B":
Console.WriteLine("Good");
break;
case "C":
Console.WriteLine("Satisfactory");
break;
default:
Console.WriteLine("Needs improvement");
break;
}switch は、同じ結果を共有する複数の case を、case ラベルを連続して積み重ねることでグループ化できます — これを fall-through と呼びます。いくつかの case の間にコードがない場合、それらはすべて同じブロックを実行します:
char dayCode = 'S';
switch (dayCode)
{
case 'M':
case 'T':
case 'W':
case 'R':
case 'F':
Console.WriteLine("Weekday");
break;
case 'S':
case 'U':
Console.WriteLine("Weekend");
break;
default:
Console.WriteLine("Unknown day");
break;
}ここでは、'S' と 'U' の両方が同じ Console.WriteLine("Weekend") の呼び出しに fall through します。このように空の case ラベルを積み重ねるのは、C# で case をグループ化する標準的な方法です。
チャレンジ
中級convertGradeToPoints という名前のメソッドを作成してください:
- 文字列パラメータとしてレターグレードを受け取ります
- switch と if-else の両方のアプローチを使用して、それを数値のグレードポイントに変換します
- このメソッドは両方のアプローチを実装し、switch 実装の結果を返します
- 以下のグレード変換を使用します:
- "A" または "a" = 4
- "B" または "b" = 3
- "C" または "c" = 2
- "D" または "d" = 1
- "F" または "f" = 0
- その他の入力 = -1
チートシート
C# では、複数の条件を処理するための主な方法として 2 つを提供します:if-else 文 と switch 文。
if-else 文 は柔軟で、あらゆる種類の条件を扱うことができます:
string grade = "B";
if (grade == "A")
{
Console.WriteLine("Excellent");
}
else if (grade == "B")
{
Console.WriteLine("Good");
}
else if (grade == "C")
{
Console.WriteLine("Satisfactory");
}
else
{
Console.WriteLine("Needs improvement");
}switch 文 は、単一の変数を複数の定数値と比較する場合に、よりクリーンです:
string grade = "B";
switch (grade)
{
case "A":
Console.WriteLine("Excellent");
break;
case "B":
Console.WriteLine("Good");
break;
case "C":
Console.WriteLine("Satisfactory");
break;
default:
Console.WriteLine("Needs improvement");
break;
}switch 文は、複数の case をグループ化(fall-through)して、同じ結果を共有するために case ラベルを積み重ねることができます:
char dayCode = 'S';
switch (dayCode)
{
case 'M':
case 'T':
case 'W':
case 'F':
Console.WriteLine("Weekday");
break;
case 'S':
case 'U':
Console.WriteLine("Weekend");
break;
default:
Console.WriteLine("Unknown day");
break;
}自分で試してみよう
public class ConvertGradeToPoints
{
// convertGradeToPoints メソッドを実装する
public static int convertGradeToPoints(string letterGrade)
{
// ここにコードを書く
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety