Short-Circuit Evaluation
Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 36 de 66.
Avaliação de curto-circuito é uma técnica de otimização no C# onde o segundo operando dos operadores AND lógico (&&) e OR (||) é avaliado apenas quando necessário.
Para o AND lógico (&&), se o primeiro operando for false, o resultado será sempre false independentemente do segundo operando:
bool result = false && SomeMethod();Neste exemplo, SomeMethod() não será chamado porque o primeiro operando já é false.
Para o OR lógico (||), se o primeiro operando for true, o resultado será sempre true independentemente do segundo operando:
bool result = true || SomeMethod();Aqui, SomeMethod() não será chamado porque o primeiro operando já é true.
Esse comportamento pode ser usado para prevenir erros, como verificar se um objeto é null antes de acessar suas propriedades:
// Safe - if student is null, the right side won't evaluate
if (student != null && student.Grade > 70)
{
Console.WriteLine("Student passed!");
}Desafio
FácilCrie um método chamado ProcessUserInput que recebe dois argumentos:
- Uma string (
input) - Um inteiro (
minLength)
O método deve:
- Verificar se o input não é null
- Verificar se o comprimento do input é pelo menos
minLength - Somente se ambas as condições forem verdadeiras, imprimir "Valid input: " seguido do input
- Se qualquer condição falhar, imprimir "Invalid input"
Use avaliação de curto-circuito para prevenir qualquer NullReferenceException potencial.
Folha de consulta
A avaliação em curto-circuito é uma técnica de otimização na qual o segundo operando de operadores lógicos é avaliado apenas quando necessário.
Para o AND lógico (&&), se o primeiro operando for false, o segundo operando não é avaliado:
bool result = false && SomeMethod(); // SomeMethod() won't be calledPara o OR lógico (||), se o primeiro operando for true, o segundo operando não é avaliado:
bool result = true || SomeMethod(); // SomeMethod() won't be calledIsso evita erros ao verificar as condições na ordem correta:
// Safe - if student is null, student.Grade won't be accessed
if (student != null && student.Grade > 70)
{
Console.WriteLine("Student passed!");
}Experimente você mesmo
using System;
class ProcessUserInput
{
public static void processUserInput(string input, int minLength)
{
// Escreva seu código aqui
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
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