Programación defensiva
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. Consiste en comprobar si hay valores nulos antes de intentar utilizar objetos.
Comprueba si es null antes de usar un objeto:
string name = GetNameFromSomewhere();
// Verificación defensiva
if (name == null)
{
// Manejar el caso nulo
name = "Default Name";
}
// Ahora es seguro usar name
Console.WriteLine(name.ToUpper());Valida los parámetros en los métodos:
public void ProcessOrder(Order order)
{
// Comprobación defensiva del parámetro null
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 realizar comprobaciones de null más limpias:
Customer customer = GetCustomerFromSomewhere();
// En lugar de:
// string city = null;
// if (customer != null && customer.Address != null)
// {
// city = customer.Address.City;
// }
// Usa esto:
string city = customer?.Address?.City;Desafío
FácilCrea un método llamado ProcessUserData que acepte un parámetro de cadena userData. El método debe:
- Comprobar si
userDataes null; si lo es, imprimir "Error: User data is null" y devolver. - Comprobar si
userDataestá vacío; si lo está, imprimir "Error: User data is empty" y devolver. - Si los datos son válidos, convertirlos a mayúsculas e imprimir "Processing: [UPPERCASE_DATA]".
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
1Arrays multidimensionales
Conceptos básicos de arrays 2DDeclaración e inicialización de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DArrays irregularesOperaciones comunes con matricesRepaso: arrays multidimensionales4Técnicas de control de flujo
Retornos anticipadosCláusulas de guardaSentencias de salto (goto)Break y ContinueAplanar condicionales anidados7Operadores lógicos avanzados
Evaluación de cortocircuitoOperadores lógicos condicionalesPrecedencia de operadoresRepaso: operadores avanzados2Toma de decisiones avanzada
Múltiples condicionesLógica booleana complejaComparación entre If y SwitchSentencias Switch anidadasRepaso: decisiones avanzadas5Manejo de excepciones
Fundamentos de Try-CatchTipos de excepcionesMúltiples bloques CatchTrabajo con archivosBloque FinallyUso de Using frente a Try-FinallyExcepciones personalizadasRepaso: manejo de errores3Mejoras de bucles
Rendimiento de buclesIteración de estructuras complejasCada tipo de bucleRefactorización de buclesRepaso: bucles optimizados6Manejo de valores nulos
Conceptos básicos de referencias nulasTipos de valor anulablesPatrones de comprobación de valores nulosProgramación defensivaRepaso: seguridad frente a valores nulosPractica por tu cuenta: Compilador de C# online