DEV Community

Bruno Pizol Camargo
Bruno Pizol Camargo

Posted on • Edited on

6 1 1 2 1

Evitando o Abuso do Else: Estratégias e Boas Práticas em Programação em C#

Desenvolver software claro e legível é fundamental para a manutenção e compreensão eficaz do código. Recentemente, uma discussão significativa surgiu na comunidade tech do Twitter sobre a recusa de Pull Requests (PRs) quando o else é usado. A justificativa é que o else prejudica a legibilidade e que há várias técnicas para evitar seu uso. Sendo assim, quais seriam essas formas para evitar o uso indiscriminado do else? Abaixo, apresento uma lista de estratégias para contornar o uso do else, destacando os pontos fortes e fracos de cada alternativa.

  1. Early Return:
    • Pontos Fortes:
      • Reduz a profundidade dos blocos, facilitando a leitura.
      • Evita a necessidade de aninhar várias condições else.
    • Pontos Fracos:
      • Pode resultar em múltiplos pontos de retorno no código.
      • Alguns desenvolvedores consideram isso uma má prática, pois atrapalha o fluxo de debug da aplicação.
public bool ValidarDados(List<string> dados)
{
    if (dados == null || dados.Count == 0)
        return false;

    // Restante da lógica de validação
    return true;
}

Enter fullscreen mode Exit fullscreen mode
  1. Mapping com Dictionary em C#:
    • Pontos Fortes:
      • Simplifica a lógica, associando valores a comportamentos.
      • Reduz a necessidade de blocos else ao utilizar mapeamentos.
    • Pontos Fracos:
      • Pode aumentar a complexidade se o mapeamento for extenso.
Dictionary<string, Func<int, int, int>> operacoes = new Dictionary<string, Func<int, int, int>>
{
    { "soma", (x, y) => x + y },
    { "subtracao", (x, y) => x - y }
};

int resultado = operacoes["soma"](5, 3);

Enter fullscreen mode Exit fullscreen mode
  1. Break the Chain em .NET:
    • Pontos Fortes:
      • Divide operações complexas em etapas, facilitando a compreensão.
      • Reduz a necessidade de blocos else ao retornar antecipadamente.
    • Pontos Fracos:
      • Pode levar a muitas funções pequenas, tornando o código fragmentado.
public Resultado ProcessarDados(List<string> dados)
{
    if (!ValidarDados(dados))
        return null;

    // Processamento adicional
    return resultadoFinal;
}

Enter fullscreen mode Exit fullscreen mode
  1. Move Nested Blocks em C#:
    • Pontos Fortes:
      • Melhora a legibilidade ao mover condições aninhadas para funções separadas.
      • Facilita testes unitários de cada condição isoladamente.
    • Pontos Fracos:
      • Introduz mais funções no escopo.
private bool VerificarCondicao1()
{
    // Lógica da condição 1
}

private bool VerificarCondicao2()
{
    // Lógica da condição 2
}

if (VerificarCondicao1())
{
    // Lógica quando a condição 1 é verdadeira
}
else if (VerificarCondicao2())
{
    // Lógica quando a condição 2 é verdadeira
}

Enter fullscreen mode Exit fullscreen mode
  1. Uso de Strategy Pattern em C#:
    • Pontos Fortes:
      • Encapsula algoritmos em classes, eliminando a necessidade de else.
      • Facilita a extensão do código com novas estratégias.
    • Pontos Fracos:
      • Pode ser excessivo para problemas simples, na maioria dos casos é como usar uma bazuca para matar uma mosca
interface IEstrategia
{
    void Executar();
}

class EstrategiaA : IEstrategia
{
    public void Executar()
    {
        // Lógica da Estratégia A
    }
}

class EstrategiaB : IEstrategia
{
    public void Executar()
    {
        // Lógica da Estratégia B
    }
}

IEstrategia estrategia = new EstrategiaA(); // Estratégia inicial
estrategia.Executar(); // Executa a Estratégia A

Enter fullscreen mode Exit fullscreen mode
  1. Uso de Ternário para Melhorar Legibilidade em C#:
    • Pontos Fortes:
      • Em expressões curtas, proporciona uma alternativa legível.
      • Reduz a necessidade de blocos else em situações simples.
    • Pontos Fracos:
      • Pode se tornar confuso em expressões longas.
string status = (pontuacao >= 70) ? "Aprovado" : "Reprovado";

Enter fullscreen mode Exit fullscreen mode

Conclusão:

Evitar o abuso do else é crucial para manter o código claro e legível em C#. Cada estratégia tem seus pontos fortes e fracos, e a escolha depende da complexidade do problema. Utilizando essas abordagens com sabedoria, os desenvolvedores podem criar um código mais robusto, legível e fácil de manter em projetos .NET.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (1)

Collapse
 
rodrigobritez profile image

Muito top teu artigo

A maneira como você detalhou cada estratégia, desde o Early Return até o uso de Ternários, mostra um alto entendimento não apenas do C#, mas também dos princípios de design de software. Especialmente, gostei de como você equilibrou os pontos fortes e fracos de cada técnica, destacando que não existe uma 'bala de prata' na programação.

Seu exemplo de Early Return é um ótimo lembrete de como a simplicidade muitas vezes leva à maior clareza em código. E o uso do Strategy Pattern, apesar de suas limitações, é uma excelente demonstração de como o código pode ser estruturado de forma mais flexível e extensível.

Parabéns pela ótima contribuição e estou ansioso para ler mais dos seus insights no futuro!

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay