Guard Clauses
Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 19 de 66.
Cláusulas de guarda são instruções condicionais no início de um método que verificam casos de borda ou entradas inválidas e retornam antecipadamente se essas condições forem atendidas.
Vamos criar um método sem uma cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order != null)
{
// Processa o pedido
// Muitas linhas de código aqui...
}
}Agora, vamos reescrevê-lo com uma cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Cláusula de guarda - sai antecipadamente se o pedido for nulo
}
// Processa o pedido
// Muitas linhas de código aqui...
}As cláusulas de guarda melhoram a legibilidade ao reduzir o aninhamento e tratar casos excepcionais no início de um método.
Desafio
FácilCrie um método chamado DivideNumbers que recebe dois inteiros, numerator e denominator.
- Adicione uma cláusula de guarda para verificar se o denominador é zero.
- Se o denominador for zero, imprima: "Cannot divide by zero" e retorne 0.
- Caso contrário, divida o numerador pelo denominador e retorne o resultado.
Folha de consulta
Guard clauses (cláusulas de guarda) são declarações condicionais no início de um método que verificam casos extremos ou entradas inválidas e retornam antecipadamente se essas condições forem atendidas.
Sem guard clause:
public void ProcessOrder(Order order)
{
if (order != null)
{
// Processar o pedido
// Muitas linhas de código aqui...
}
}Com guard clause:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Guard clause - sai antecipadamente se o pedido for nulo
}
// Processar o pedido
// Muitas linhas de código aqui...
}As guard clauses melhoram a legibilidade ao reduzir o aninhamento e lidar com casos excepcionais no início de um método.
Experimente você mesmo
using System;
public class Program
{
public static int DivideNumbers(int numerator, int denominator)
{
// Escreva seu código aqui
}
public static void Main()
{
// Lê as entradas do console
int numerator = Convert.ToInt32(Console.ReadLine());
int denominator = Convert.ToInt32(Console.ReadLine());
// Chama o método DivideNumbers
int result = DivideNumbers(numerator, denominator);
// Imprime o resultado
Console.WriteLine(result);
}
}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