Defensive Programming
Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 34 de 66.
A programação defensiva é uma técnica que ajuda a prevenir erros causados por referências nulas. Ela envolve verificar valores nulos antes de tentar usar objetos.
Verifique se é nulo antes de usar um 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 em métodos:
public void ProcessOrder(Order order)
{
// Defensive check for null parameter
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
// Now safe to process the order
Console.WriteLine("Processing order: " + order.Id);
}Use o operador de acesso condicional (?.) para verificações de nulo mais limpas:
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;Desafio
FácilCrie um método chamado ProcessUserData que aceita um parâmetro string userData. O método deve:
- Verifique se
userDataé null - se for, imprima "Error: User data is null" e retorne. - Verifique se
userDataestá vazio - se estiver, imprima "Error: User data is empty" e retorne. - Se os dados forem válidos, converta-os para maiúsculas e imprima "Processing: [UPPERCASE_DATA]".
Folha de consulta
Programação defensiva previne erros verificando valores nulos antes de usar objetos.
Verifique se é null antes de usar um objeto:
string name = GetNameFromSomewhere();
if (name == null)
{
name = "Default Name";
}
Console.WriteLine(name.ToUpper());Valide parâmetros em métodos:
public void ProcessOrder(Order order)
{
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
Console.WriteLine("Processing order: " + order.Id);
}Use o operador de acesso condicional (?.) para verificações de null mais limpas:
Customer customer = GetCustomerFromSomewhere();
string city = customer?.Address?.City;Experimente você mesmo
using System;
class ProcessUserData
{
public static void processUserData(string userData)
{
// Dica: a string "null" deve ser tratada como um valor null real
// 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