Short-Circuit Evaluation
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 36 из 66.
Короткозамкнутая оценка — это техника оптимизации в C#, при которой второй операнд логических операторов И (&&) и ИЛИ (||) вычисляется только при необходимости.
Для логического И (&&), если первый операнд равен false, результат всегда будет false независимо от второго операнда:
bool result = false && SomeMethod();В этом примере SomeMethod() не будет вызван, потому что первый операнд уже false.
Для логического ИЛИ (||), если первый операнд равен true, результат всегда будет 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, который принимает два аргумента:
- Строку (
input) - Целое число (
minLength)
Метод должен:
- Проверить, что input не равен null
- Проверить, что длина input не менее
minLength - Только если оба условия истинны, вывести "Valid input: " за которым следует input
- Если хотя бы одно условие не выполнено, вывести "Invalid input"
Используйте короткозамкнутую оценку, чтобы предотвратить возможное NullReferenceException.
Шпаргалка
Короткозамкнутая оценка — это техника оптимизации, при которой второй операнд логических операторов вычисляется только при необходимости.
Для логического И (&&), если первый операнд равен false, второй операнд не вычисляется:
bool result = false && SomeMethod(); // SomeMethod() won't be calledДля логического ИЛИ (||), если первый операнд равен true, второй операнд не вычисляется:
bool result = true || SomeMethod(); // SomeMethod() won't be calledЭто предотвращает ошибки путем проверки условий по порядку:
// Safe - if student is null, student.Grade won't be accessed
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