Defensive Programming
Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 34 de 66.
La programación defensiva es una técnica que ayuda a prevenir errores causados por referencias nulas. Implica verificar valores nulos antes de intentar usar objetos.
Comprobar null antes de usar un objeto:
string name = GetNameFromSomewhere();
// Defensive check
if (name == null)
{
// Handle the null case
name = "Default Name";
}
// Now it's safe to use name
Console.WriteLine(name.ToUpper());Validar parámetros en métodos:
public void ProcessOrder(Order order)
{
// Comprobación defensiva para parámetro nulo
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
// Ahora es seguro procesar el pedido
Console.WriteLine("Processing order: " + order.Id);
}Usa el operador de acceso condicional (?.) para comprobaciones de null más limpias:
Customer customer = GetCustomerFromSomewhere();
// Instead of:
// string city = null;
// if (customer != null && customer.Address != null)
// {
// city = customer.Address.City;
// }
// Use this:
string city = customer?.Address?.City;Desafío
FácilCrea un método llamado ProcessUserData que acepta un parámetro string userData. El método debe:
- Verificar si
userDataes null - si lo es, imprimir "Error: User data is null" y retornar. - Verificar si
userDataestá vacío - si lo es, imprimir "Error: User data is empty" y retornar. - Si los datos son válidos, conviértelos a mayúsculas e imprime "Processing: [UPPERCASE_DATA]".
Hoja de referencia
La programación defensiva previene errores verificando valores nulos antes de usar objetos.
Verificar nulo antes de usar un objeto:
string name = GetNameFromSomewhere();
if (name == null)
{
name = "Default Name";
}
Console.WriteLine(name.ToUpper());Validar parámetros en métodos:
public void ProcessOrder(Order order)
{
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
Console.WriteLine("Processing order: " + order.Id);
}Usar el operador de acceso condicional (?.) para verificaciones de nulo más limpias:
Customer customer = GetCustomerFromSomewhere();
string city = customer?.Address?.City;Pruébalo tú mismo
using System;
class ProcessUserData
{
public static void processUserData(string userData)
{
// Pista: la cadena "null" debe tratarse como un valor null real
// Escribe tu código aquí
}
}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