DEV Community

Cover image for Guard Clauses no C#
Lincoln Quinan Junior
Lincoln Quinan Junior

Posted on

Guard Clauses no C#

Guard Clauses, ou Cláusulas de Guarda, são práticas de programação que previnem a execução de métodos sob condições inadequadas, promovendo uma política de retorno antecipado. Elas identificam e tratam problemas imediatamente por meio de exceções quando condições específicas não são satisfeitas.

Implementação de Guard Clauses em .NET

Existem duas maneiras principais de implementar Guard Clauses em .NET:

  • Personalizadas: Criando métodos estáticos em classes estáticas para verificar condições específicas e lançar exceções quando necessário. Isso centraliza a lógica de validação e melhora a legibilidade do código.
public static class Guard
{
    public static void IsNotNull(object value, string parameterName)
    {
        if (value == null)
            throw new ArgumentNullException(parameterName, "O valor não pode ser nulo.");
    }

    public static void IsGreaterThanZero(int number, string parameterName)
    {
        if (number <= 0)
            throw new ArgumentException("O número deve ser maior que zero.", parameterName);
    }
}
Enter fullscreen mode Exit fullscreen mode
  • Bibliotecas .NET: Utilizando pacotes NuGet como Guard.Net e Ardalis.GuardClauses, que oferecem uma variedade de métodos prontos para uso, simplificando a implementação.
// Usando Guard.Net
Guard.Argument(username, nameof(username)).NotNull().NotEmpty();

// Usando Ardalis.GuardClauses
Guard.Against.NullOrEmpty(email, nameof(email));
Guard.Against.InvalidEmail(email, nameof(email));
Enter fullscreen mode Exit fullscreen mode

Refatoração com Guard Clauses

A refatoração de códigos para incluir Guard Clauses elimina aninhamentos excessivos e torna as pré-condições explícitas, facilitando a manutenção e a compreensão do código.

Antes:

public void ProcessOrder(Order order)
{
    if (order != null)
    {
        if (order.Items.Count > 0)
        {
            if (order.TotalAmount > 0)
            {
                Console.WriteLine("Pedido processado.");
            }
            else { throw new Exception("Valor total deve ser maior que zero."); }
        }
        else { throw new Exception("O pedido deve ter ao menos um item."); }
    }
    else { throw new Exception("O pedido não pode ser nulo."); }
}
Enter fullscreen mode Exit fullscreen mode

Depois:

public void ProcessOrder(Order order)
{
    GuardAgainstNullOrder(order);
    GuardAgainstEmptyOrder(order);
    GuardAgainstZeroValueOrder(order);
    Console.WriteLine("Pedido processado.");
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Guard Clauses são essenciais para desenvolver software robusto, seguro e de fácil manutenção. Elas permitem uma validação eficiente e direta das entradas de métodos, alinhando-se com a filosofia de design fail-fast. A escolha entre implementações personalizadas ou bibliotecas prontas depende das preferências e necessidades específicas do projeto. Adotar Guard Clauses é um passo crucial para melhorar a qualidade do código e a resiliência dos sistemas de software.

Top comments (0)