C# 13: Exceções e Logs Avançados para Código Impecável
Melhore seu código com Pattern Matching aprimorado no C# 13
Imagine que você está construindo uma aplicação que processa diferentes formatos de entrada de dados, sejam eles números, cadeias de caracteres ou mesmo tipos personalizados. Pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. é a funcionalidade que torna o código mais expressivo e seguro, ao permitir que você avalie e manipule valores de forma simples e legível.
No C# 13O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET., o pattern matching
Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. foi aprimorado com novos recursos, tornando ainda mais fácil lidar com cenários complexos sem precisar recorrer a blocos extensos de condicionais. Esse tutorial tem como objetivo apresentar esses novos recursos e demonstrar como eles podem elevar a legibilidade e o desempenho do seu código em apenas alguns exemplos práticos.
Por que o pattern matching é tão importante?🔗
O pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. foi introduzido originalmente para ajudar a tratar de maneira concisa tipos e valores dentro de switch expressions e condicionais. A cada versão do C#, a linguagem ganha melhorias nessa área. No C# 13
O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET., essas melhorias foram focadas na:
- Simplificação de código: reduzir a verbosidade ao lidar com diversos cenários.
- Clareza: extrair informações de objetos sem precisar de casts manuais e checagens adicionais.
- Desempenho: utilizar construções mais eficientes para comparar e filtrar valores, diminuindo a necessidade de instruções redundantes.
Novas construções de pattern matching no C# 13🔗
A seguir, veremos algumas das novidades relevantes na sintaxe e nas possibilidades de utilizar pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. no C# 13
O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET..
Combinações mais expressivas com “and”, “or” e “not”
O C# 13O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. se apoia no poder de expressões lógicas para criar condições compostas dentro do pattern matching
Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade.. Repare como a sintaxe permite construir “blocos lógicos” dentro de um mesmo case:
public static string AvaliarValor(int numero)
{
return numero switch
{
0 and < 10 => "Número entre 1 e 9",
< 0 or > 100 => "Valor fora do intervalo esperado",
10 => "Exatamente 10",
not 10 => "Qualquer outro número diferente de 10"
};
}
Observe que:
- and permite a junção de dois padrões obrigatórios: “número maior que zero e menor que 10”.
- or possibilita admitir situações diferentes com apenas uma linha: “número menor que zero ou maior que 100”.
- not inverte a condição para capturar o “caso contrário”, evitando declarações extras de if-else.
Patterns para propriedades e sub-objetos
Nos recursos anteriores de pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade., se queríamos inspecionar as propriedades de um objeto aninhado, muitas vezes precisávamos de checagens extras. Agora, ficou mais fácil combinar a verificação de diferentes propriedades dentro de uma única expressão de pattern:
public class Produto
{
public string Nome { get; set; }
public decimal Preco { get; set; }
public Categoria Categoria { get; set; }
}
public class Categoria
{
public string NomeCategoria { get; set; }
public bool Ativa { get; set; }
}
public static string VerificarProduto(Produto produto)
{
return produto switch
{
{ Nome: "Lápis", Preco: <= 1.0M, Categoria: { NomeCategoria: "Papelaria", Ativa: true } }
=> "Produto de papelaria básico",
{ Categoria: { NomeCategoria: "Eletrônicos", Ativa: true } }
=> "Produto da categoria de eletrônicos ativa",
{ Categoria.Ativa: false }
=> "Produto em categoria desativada",
_ => "Produto sem correspondência de padrão"
};
}
Dessa forma, podemos verificar a categoria de um produto, seu preço, a propriedade do sub-objeto e ainda fazer comparações com valores pré-definidos, tudo isso dentro de um único switch
.
Operadores de range combinados com padrões
Outra evolução do C# é a capacidade de trabalhar com ranges, que agora podem ser combinados de forma ainda mais rica com padrões de intervalo. Por exemplo:
public static string ClassificarIdade(int idade)
{
return idade switch
{
< 0 => "Idade inválida",
0 or 1 => "Bebê",
= 2 and <= 12 => "Criança",
= 13 and <= 17 => "Adolescente",
< 65 => "Adulto",
_ => "Idoso"
};
}
Embora o uso de ranges não seja exatamente uma novidade, a integração suave com and
e or
em C# 13O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. permite expressar, em uma única expressão, toda a lógica de comparação sem precisar de declarações múltiplas de if-else.
Pattern matching em tuples e listas
O pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. também funciona muito bem para destructuring de tuples e até checagens iniciais em listas, tornando o código mais limpo. Veja um exemplo simples com tuples:
public static string AnalisarCoordenadas((int x, int y) coordenada)
{
return coordenada switch
{
(0, 0) => "Origem",
( > 0, > 0 ) => "Primeiro quadrante",
( < 0, > 0 ) => "Segundo quadrante",
( < 0, < 0 ) => "Terceiro quadrante",
( > 0, < 0 ) => "Quarto quadrante",
_ => "Posição não identificada"
};
}
Se você utiliza listas ou arrays, poderá empregar padrões como [..]
(para corresponder a listas inteiras sem se preocupar com o tamanho exato) e validar os elementos internos. Na versão 13, esses padrões ganharam melhorias, permitindo identificar sublistas específicas de forma mais expressiva.
Comparativo de código: antes e depois🔗
Para ilustrar o quanto o pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. do C# 13 evoluiu, segue uma breve tabela comparando a abordagem de versões anteriores com a atual:
Operação | Em versões mais antigas | Com C# 13 |
---|---|---|
Combinar múltiplas condições | Vários if-else aninhados ou diversos cases duplicados | Uso de and , or e not em uma única expressão |
Inspecionar sub-objetos e propriedades | Necessidade de checar produto != null e produto.Categoria != null , etc., antes da verificação específica | Patterns aninhados: produto switch { {Nome: "X", Categoria: { NomeCategoria: "Y" } } => … } |
Verificar faixas de valores em switch expressions | Combinação de expressões numero >= 0 && numero <= 9 em ifs | Uso integrado de > , < , <= , >= direto no switch (ex: > 0 and < 10 => "Número entre 1 e 9" ) |
Destruturar tuples (coordenadas, por exemplo) | Precisar de variáveis temporárias ou checar item a item | Patterns de tuple: ( > 0, > 0 ) => "Primeiro quadrante" |
Manejo de listas/arrays (ex: sublista inicial e/ou final) | Necessidade de loops e manipulação repetitiva | Patterns para listas com [..] , correspondência de sublistas (muito mais enxuto para inspeções rápidas) |
Boas práticas e performance🔗
- Evite o abuso de padrão: com o poder do pattern matching
Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade., é tentador criar switches enormes e complexos. Prefira dividir a lógica em funções ou métodos menores para manter a legibilidade.
- Organização do código
Boas práticas de organização do código em C# 13Domine as melhores práticas de organização em C# 13. Aprimore a legibilidade e o desempenho do seu código com dicas práticas e exemplos reais.: quando há muitos casos, utilize switch expressions bem formatados ou extraia partes do padrão para métodos auxiliares. Isso torna o propósito de cada padrão mais claro.
- Performance: em geral, o compilador Roslyn
Entendendo o compilador Roslyn no C# 13Descubra como o compilador Roslyn transforma o desenvolvimento em C# 13, oferecendo transparência, performance e extensibilidade para um código intuitivo. otimiza expressões de pattern matching
Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. para reduzir ramificações. Porém, mantenha sempre o cuidado com grandes cadeias de
or
. Em alguns casos, pode ser melhor quebrar a expressão em partes para facilitar o entendimento de quem for dar manutenção.
Exemplo prático: filtrando diferentes relatórios🔗
Suponha que tenhamos uma classe Relatorio
com várias subclasses, cada uma representando um tipo de relatório. Queremos, com base no tipo e em algumas propriedades, decidir como cada relatório deve ser processado:
public abstract class Relatorio
{
public string Autor { get; set; }
}
public class RelatorioVendas : Relatorio
{
public decimal TotalVendido { get; set; }
}
public class RelatorioEstoque : Relatorio
{
public int ProdutosEmEstoque { get; set; }
}
public class RelatorioFinanceiro : Relatorio
{
public decimal SaldoAtual { get; set; }
public bool AuditoriaExterna { get; set; }
}
public static string ProcessarRelatorio(Relatorio relatorio)
{
return relatorio switch
{
RelatorioVendas { TotalVendido: > 10000M } => "Relatório de vendas de alto valor",
RelatorioEstoque { ProdutosEmEstoque: <= 100 } => "Estoque com reposição sugerida",
RelatorioFinanceiro { SaldoAtual: >= 0, AuditoriaExterna: true }
=> "Financeiro auditado com saldo positivo",
_ => "Tipo de relatório genérico ou não caracterizado pelos padrões"
};
}
Nesta amostra, utilizamos pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. para verificar tanto o tipo (Vendas, Estoque, Financeiro) quanto as propriedades (TotalVendido, SaldoAtual, etc.). Isso torna o código autoexplicativo, dispensando grandes blocos
if (relatorio is RelatorioVendas) { … }
.
Conclusão🔗
Os novos recursos de pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. no C# 13
O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. representam um salto na clareza e na elegância do código, reduzindo a necessidade de estruturas
Otimizações para desempenho: dicas de uso correto de tipos em C# 13Descubra como otimizar seu código em C# 13 com técnicas práticas. Aprenda a escolher entre struct, class, Span<T> e ValueTask para melhor desempenho. condicionais extensas e repetitivas. É um investimento pequeno de tempo que traz enorme retorno em termos de legibilidade e manutenibilidade.
Ao adotar essas novas construções, você usufrui de:
- Código enxuto: expressões concentradas em uma única linha.
- Confiabilidade: menor chance de esquecer checagens de null ou condições especiais.
- Produtividade: manutenção mais simples, pois a intenção do código fica explícita.
Experimente substituir blocos if
, combos switch
tradicionais ou checagens aninhadas pelo poder que o pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. oferece em C# 13. Assim, você se habitua a uma sintaxe mais fluida e torna o seu código mais organizado, atendendo a cenários cada vez mais complexos com menos esforço de escrita e leitura.
Essa é apenas mais uma das muitas melhorias que o C# 13O que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. apresentou para deixar o desenvolvimento .NET ainda mais elegante e performático. Agora é a sua vez de explorar, praticar e criar soluções poderosas usando os novos recursos de pattern matching
Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade.!
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação Oficial Microsoft sobre C# – Fornece informações oficiais e detalhadas sobre os recursos da linguagem, incluindo as novidades no pattern matching que são o foco deste tutorial: docs.microsoft.com/pt-br/dotnet/csharp/