Guard Clauses
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 19/66。
ガード節は、メソッドの冒頭にある条件文で、エッジケースや無効な入力をチェックし、それらの条件が満たされた場合に早期リターンするものです。
ガード節のないメソッドを作成してみましょう:
public void ProcessOrder(Order order)
{
if (order != null)
{
// 注文を処理する
// ここに多くのコード行が続きます...
}
}では、ガード節を使って書き換えてみましょう:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // ガード節 - orderがnullの場合は早期に終了する
}
// 注文を処理する
// ここに多くのコードが続く...
}ガード節は、メソッドの冒頭で例外的なケースを処理し、ネストを減らすことで、可読性を向上させます。
チャレンジ
簡単2つの整数numeratorとdenominatorを受け取る、DivideNumbersという名前のメソッドを作成してください。
- 分母がゼロかどうかをチェックするガード節を追加してください。
- 分母がゼロの場合、"Cannot divide by zero"と出力し、0を返してください。
- それ以外の場合は、分子を分母で割り、その結果を返してください。
チートシート
ガード節は、メソッドの冒頭にある条件文で、エッジケースや無効な入力をチェックし、それらの条件が満たされた場合に早期リターンを行うものです。
ガード節がない場合:
public void ProcessOrder(Order order)
{
if (order != null)
{
// 注文を処理する
// ここに多くのコード行が続く...
}
}ガード節がある場合:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // ガード節 - orderがnullの場合は早期に終了する
}
// 注文を処理する
// ここに多くのコード行が続く...
}ガード節は、ネストを減らし、メソッドの冒頭で例外的なケースを処理することで、可読性を向上させます。
自分で試してみよう
using System;
public class Program
{
public static int DivideNumbers(int numerator, int denominator)
{
// ここにコードを書いてください
}
public static void Main()
{
// コンソールから入力を読み込む
int numerator = Convert.ToInt32(Console.ReadLine());
int denominator = Convert.ToInt32(Console.ReadLine());
// DivideNumbers メソッドを呼び出す
int result = DivideNumbers(numerator, denominator);
// 結果を表示する
Console.WriteLine(result);
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
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