Pattern matching e switch expressions
ResumoPattern matching testa a forma de um valor (tipo, propriedades, faixa) e extrai dados numa só expressão. Combinado com
switchexpression, substitui cadeias longas deif/is/cast.
1. Objetivos de Aprendizagem#
- Usar padrões de tipo, propriedade, relacionais e lógicos.
- Escrever
switchexpressions claros. - Aplicar padrões em validação e mapeamento.
2. Pré-requisitos#
- Herança e polimorfismo (tópico 5.2).
3. Conceito#
Padrões testam a "forma" de um valor:
- Tipo:
obj is Produto p(testa e já atribuip). - Propriedade:
p is { Preco: > 100 }. - Relacional:
< 5,>= 0. - Lógico:
and,or,not. - Constante /
null:is null,is 0.
O porquê: expressar decisões complexas de forma declarativa, sem casts manuais e sem esquecer casos.
4. Mão na Massa#
4.1. Setup#
dotnet new console -n Catalog.Patterns
cd Catalog.Patterns
4.2. Implementação Passo a Passo#
- Padrão de tipo:
object valor = 42;
if (valor is int n && n > 10)
Console.WriteLine($"inteiro grande: {n}");
switchexpression com padrões de propriedade e relacionais:
record Produto(string Nome, decimal Preco, int Estoque);
string Classificar(Produto p) => p switch
{
{ Estoque: 0 } => "esgotado",
{ Preco: > 1000 } => "premium",
{ Preco: > 100 and <= 1000 } => "intermediário",
_ => "básico"
};
Console.WriteLine(Classificar(new Produto("Monitor", 1500m, 3))); // premium
- Padrão lógico
not:
static bool Invalido(string? nome) => nome is null or "";
4.3. Executando#
dotnet run
5. Exemplo Completo#
O método Classificar decide a faixa de um produto combinando padrões de propriedade e relacionais numa única expressão — legível e exaustiva.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Usar switch expression para mapear estados | Cadeias de if/else if com casts manuais |
Ter um caso padrão _ | Deixar entradas sem cobertura |
| Padrões de propriedade para validações claras | Extrair dados com as + checagem de null repetida |
Atençãoa ordem dos casos importa — o primeiro padrão que casar vence. Coloque os mais específicos antes dos mais gerais.
7. Segurança e Produção#
- Sempre inclua
_(padrão) ao classificar dados externos, para não deixar valores inesperados sem tratamento definido.
8. Exercícios#
- Fácil: use
ispara testar tipo e extrair a variável. - Médio: escreva um
switchexpression que classifica uma nota (0–10) em conceitos. - Desafio: combine padrões de propriedade e
and/orpara validar um DTO.
9. Resumo#
Pattern matching testa forma (tipo, propriedade, faixa) e extrai dados; switch expression torna decisões declarativas e exaustivas. Ordene do específico ao geral e tenha um caso padrão.
10. Próximos Passos#
A seguir, inicialização moderna: init, required e target-typed new.
11. Referências#
- Microsoft Learn — Pattern matching
- Microsoft Learn — Padrões
- Microsoft Learn — switch expression