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ラベルの間にコードを記述せずに次々と重ね、最後に1つのbreakを置きます。
string grade = "B";
switch (grade)
{
case "A":
case "a":
Console.WriteLine("Excellent - 4 points");
break;
case "B":
case "b":
Console.WriteLine("Good - 3 points");
break;
case "C":
case "c":
Console.WriteLine("Satisfactory - 2 points");
break;
default:
Console.WriteLine("Needs improvement");
break;
}ここでは、"B" と "b" の両方が同じブロックにフォールスルーし、"Good - 3 points" を出力します。このパターンは、大文字と小文字の入力、あるいは任意の値のセットに対して同じ結果を出したい場合に便利です。
Switchは、同じ結果を共有する異なるラベルを持つケースをグループ化することもできます。
char dayCode = 'M';
switch (dayCode)
{
case 'M':
Console.WriteLine("Monday");
break;
case 'T':
Console.WriteLine("Tuesday or Thursday");
break;
case 'W':
Console.WriteLine("Wednesday");
break;
case 'F':
Console.WriteLine("Friday");
break;
default:
Console.WriteLine("Unknown day");
break;
}チャレンジ
中級convertGradeToPoints という名前のメソッドを作成し、以下の処理を実装してください:
- 文字列のパラメータとして成績(文字)を受け取ります
switchとif-elseの両方の手法を使用して、それを数値のグレードポイントに変換します- メソッド内では両方の手法を実装し、
switchによる実装の結果を返してください - 以下の成績変換ルールを使用してください:
- "A" または "a" = 4
- "B" または "b" = 3
- "C" または "c" = 2
- "D" または "d" = 1
- "F" または "f" = 0
- その他の入力 = -1
自分で試してみよう
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