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