Menu
Coddy logo textTech

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;
challenge icon

Desafio

Fácil

Crie um método chamado ProcessUserData que aceita um parâmetro string userData. O método deve:

  1. Verifique se userData é null - se for, imprima "Error: User data is null" e retorne.
  2. Verifique se userData está vazio - se estiver, imprima "Error: User data is empty" e retorne.
  3. 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
    }
}
quiz iconTeste seus conhecimentos

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