Guard Clauses
Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 19 de 66.
Las cláusulas de guarda son sentencias condicionales al inicio de un método que comprueban casos límite o entradas inválidas y retornan anticipadamente si se cumplen dichas condiciones.
Vamos a crear un método sin una cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order != null)
{
// Procesar el pedido
// Muchas líneas de código aquí...
}
}Ahora, vamos a reescribirlo con una cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Cláusula de guarda - salir temprano si el pedido es nulo
}
// Procesar el pedido
// Muchas líneas de código aquí...
}Las cláusulas de guarda mejoran la legibilidad al reducir el anidamiento y manejar los casos excepcionales al principio de un método.
Desafío
FácilCrea un método llamado DivideNumbers que reciba dos enteros, numerator y denominator.
- Añade una cláusula de guarda para comprobar si el denominador es cero.
- Si el denominador es cero, imprime: "Cannot divide by zero" y devuelve 0.
- De lo contrario, divide el numerador por el denominador y devuelve el resultado.
Hoja de referencia
Las cláusulas de guarda son sentencias condicionales al principio de un método que comprueban casos límite o entradas no válidas y retornan anticipadamente si se cumplen esas condiciones.
Sin cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order != null)
{
// Procesar el pedido
// Muchas líneas de código aquí...
}
}Con cláusula de guarda:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Cláusula de guarda - salir anticipadamente si order es null
}
// Procesar el pedido
// Muchas líneas de código aquí...
}Las cláusulas de guarda mejoran la legibilidad al reducir el anidamiento y manejar casos excepcionales al principio de un método.
Pruébalo tú mismo
using System;
public class Program
{
public static int DivideNumbers(int numerator, int denominator)
{
// Escribe tu código aquí
}
public static void Main()
{
// Leer entradas de la consola
int numerator = Convert.ToInt32(Console.ReadLine());
int denominator = Convert.ToInt32(Console.ReadLine());
// Llamar al método DivideNumbers
int result = DivideNumbers(numerator, denominator);
// Imprimir el resultado
Console.WriteLine(result);
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
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