Utilizando comparação de padrões (Pattern Matching)

Comparação (ou correspondência) de padrões, do inglês pattern matching é um dos conceitos fundamentais da programação funcional.

Este conceito pode substituir uma série de desvios de fluxo de código, tais como:

  • Comparações If-else

  • Switch-cases

  • Laços de repetição (for, foreach, while e do)

  • Comparação de tipos

Um pattern matching na linguagem F# para substituir uma comparação de If, possui uma sintaxe similar à:

match expressaoBooleana with
| true  -> //padrão para o caso true 
| false -> //padrão para o caso false

Mas podemos realizar comparações entre diferentes padrões, veja um exemplo com um valor inteiro:

let valor = 10
match valor with
| 1 | 2 | 3         -> //Quando o valor for 1, 2 ou 3
| n when n % 2 = 0  -> //Quando o valor for par
| 5                 -> //Quando o valor for 5
| _                 -> //Outros casos

Existem uma série de benefícios com a utilização do pattern matching, tanto que, a partir da versão 7.0 do C# é possível utilizarmos esta funcionalidade nativamente na linguagem, conforme documentação da Microsoft.

Como implementação na biblioteca Tango alguns tipos de objetos possuem um método chamado Match.

Este método espera por parâmetros funções (Métodos ou expressões lambdas) para os possíveis padrões de acordo com cada tipo.

Além dele, também há a implementação de um segundo método chamado Match2, este método é similar ao primeiro, mas neste caso o padrão é aplicado sobre dois valores diferentes do mesmo tipo ao invés de apenas um valor.

Last updated