sábado, 25 de janeiro de 2025

Controle de Fluxo Avançado no C#: Técnicas para Escrever Código Mais Eficiente e Inteligente


Introdução

No desenvolvimento em C#, controlar como o programa executa diferentes ações é essencial para criar aplicações eficientes. Para além das estruturas básicas de controle de fluxo como if, for e while, o C# oferece recursos avançados que podem tornar seu código mais flexível, eficiente e fácil de manter. Neste artigo, vamos explorar algumas dessas ferramentas avançadas, como switch expressions, pattern matching, async/await e mais.


1. Switch Expressions

As expressões switch, introduzidas no C# 8.0, permitem escrever código mais conciso e expressivo, especialmente em substituição a longas cadeias de if-else.

Exemplo Básico

string ObterCategoria(int idade) =>
    idade switch
    {
        < 13 => "Criança",
        >= 13 and < 18 => "Adolescente",
        >= 18 and < 65 => "Adulto",
        _ => "Idoso"
    };

Console.WriteLine(ObterCategoria(25)); // Saída: Adulto

Vantagens:

  • Código mais limpo e legível.
  • Suporte a padrões complexos, como combinações lógicas (and, or).

2. Pattern Matching (Correspondência de Padrões)

O Pattern Matching permite verificar e extrair informações de objetos de forma mais intuitiva e poderosa. Ele é amplamente usado em switch e is.

Exemplos

Verificando Tipos com is:

object dado = 42;

if (dado is int numero)
{
    Console.WriteLine($"É um inteiro: {numero}");
}

Pattern Matching no switch:

object forma = new Circulo { Raio = 5 };

string descricao = forma switch
{
    Circulo c => $"Um círculo com raio {c.Raio}",
    Retangulo r => $"Um retângulo de largura {r.Largura} e altura {r.Altura}",
    _ => "Forma desconhecida"
};

Console.WriteLine(descricao);

3. Recursos Avançados de Loops

break, continue e goto

Embora break e continue sejam comuns, o uso do goto pode ser útil em cenários complexos (mas deve ser usado com moderação).

for (int i = 0; i < 10; i++)
{
    if (i == 3)
    {
        Console.WriteLine("Pulando o número 3");
        continue;
    }

    if (i == 7)
    {
        Console.WriteLine("Saindo do loop no número 7");
        break;
    }

    Console.WriteLine(i);
}

4. Async/Await para Fluxo Assíncrono

A programação assíncrona é um recurso avançado que melhora o desempenho em operações I/O intensivas ou de longa duração. Com o async/await, o fluxo é mantido de forma legível enquanto evita bloqueios.

Exemplo

public async Task<string> BuscarDadosAsync()
{
    Console.WriteLine("Iniciando busca...");
    await Task.Delay(2000); // Simula uma operação longa
    return "Dados carregados!";
}

public async Task Executar()
{
    string resultado = await BuscarDadosAsync();
    Console.WriteLine(resultado);
}

await new Program().Executar();

5. Operadores Ternários Aninhados

Embora os operadores ternários sejam mais simples que o if-else, usá-los de forma aninhada é útil para expressar múltiplas condições compactamente.

Exemplo

int numero = 5;
string tipo = numero % 2 == 0
    ? "Par"
    : numero < 0
        ? "Negativo"
        : "Ímpar";

Console.WriteLine(tipo); // Saída: Ímpar

6. Expressões Lambda e LINQ no Controle de Fluxo

Você pode usar expressões lambda para simplificar loops e manipulação de dados com LINQ.

Exemplo

var numeros = new[] { 1, 2, 3, 4, 5 };
var pares = numeros.Where(n => n % 2 == 0).ToList();

pares.ForEach(n => Console.WriteLine($"Número par: {n}"));

7. Throw Expressions em Linhas Únicas

No C# 7.0, foi introduzido suporte ao throw em expressões, tornando mais simples lançar exceções em verificações.

Exemplo

public string Nome
{
    get => _nome;
    set => _nome = value ?? throw new ArgumentNullException(nameof(value), "O nome não pode ser nulo");
}

Conclusão

Dominar o controle de fluxo avançado no C# permite escrever código mais eficiente, legível e alinhado às melhores práticas. Ferramentas como switch expressions, pattern matching, e a programação assíncrona com async/await são essenciais para enfrentar os desafios de aplicações modernas.

Experimente incorporar essas técnicas em seus projetos e veja como elas podem transformar sua maneira de programar. Compartilhe suas dúvidas ou experiências nos comentários!

Nenhum comentário:

Postar um comentário