Tango-br
  • Introduction
  • Começando
    • Índice
    • Recado do desenvolvedor
    • O que é a Tango?
    • Por onde começar?
  • Instalação
    • Instalação via NuGet
    • Instalação manual
  • Conceitos
    • Introdução
    • Utilizando comparação de padrões (Pattern Matching)
    • Valores Opcionais
    • Valores "Ou um ou outro" (Either)
    • Saindo do void para o Unit
    • Delegates Func e Action
    • Utilizando operações encadeadas com processos contínuos
    • Currying e Aplicação Parcial
  • Funcional
    • Introdução
    • Currying
    • Aplicação Parcial
    • Extensões
    • Cast Rápido para Delegates
  • Operações
    • Introdução
    • Operações com Booleans
    • Operações com Inteiros
    • Operações com Decimais
    • Operações com Doubles
    • Operações com Strings
  • Tipos
    • Introdução
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Módulos
    • Introdução
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensões
    • Introdução
    • Extensões para Enum
    • Construtor de EqualityComparer
    • Módulos como extensão
Powered by GitBook
On this page

Was this helpful?

  1. Conceitos

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

PreviousIntroduçãoNextValores Opcionais

Last updated 5 years ago

Was this helpful?

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 .

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.

Microsoft