Short-Circuit Evaluation
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 36/66。
短絡評価は、C# における最適化手法で、論理 AND (&&) および OR (||) 演算子の第2オペランドが、必要な場合にのみ評価されるものです。
論理 AND (&&) の場合、最初のオペランドが false なら、2番目のオペランドに関わらず結果は常に false となります:
bool result = false && SomeMethod();この例では、SomeMethod() は最初のオペランドがすでに false であるため呼び出されません。
論理 OR (||) の場合、最初のオペランドが true の場合、2番目のオペランドに関わらず結果は常に true になります:
bool result = true || SomeMethod();ここでは、SomeMethod() は呼び出されません。なぜなら、最初のオペランドがすでに true だからです。
この動作は、エラーを防ぐために使用できます。例えば、オブジェクトが null かどうかを確認してからそのプロパティにアクセスするような場合です:
// Safe - if student is null, the right side won't evaluate
if (student != null && student.Grade > 70)
{
Console.WriteLine("Student passed!");
}チャレンジ
簡単ProcessUserInput という名前のメソッドを作成し、2 つの引数を受け取るようにしてください:
- 文字列 (
input) - 整数 (
minLength)
このメソッドは次のことを行います:
- input が null でないかをチェックします
- input の長さが
minLength以上かをチェックします - 両方の条件が true の場合にのみ、"Valid input: " の後に input を出力します
- いずれかの条件が false の場合、"Invalid input" を出力します
潜在的な NullReferenceException を防ぐために、短絡評価を使用してください。
チートシート
短絡評価は、論理演算子の第2オペランドが評価される必要がある場合にのみ評価される最適化手法です。
論理 AND (&&) の場合、最初のオペランドが false の場合、第2オペランドは評価されません:
bool result = false && SomeMethod(); // SomeMethod() は呼び出されません論理 OR (||) の場合、最初のオペランドが true の場合、第2オペランドは評価されません:
bool result = true || SomeMethod(); // SomeMethod() は呼び出されませんこれにより、条件を順序立ててチェックすることでエラーを防げます:
// 安全 - student が null の場合、student.Grade にアクセスされません
if (student != null && student.Grade > 70)
{
Console.WriteLine("Student passed!");
}自分で試してみよう
using System;
class ProcessUserInput
{
public static void processUserInput(string input, int minLength)
{
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
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