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

Valores Opcionais

PreviousUtilizando comparação de padrões (Pattern Matching)NextValores "Ou um ou outro" (Either)

Last updated 5 years ago

Was this helpful?

Os valores opcionais são uma maneira de representar dados incertos, nem sempre é possível termos certeza do resultado de alguma operação.

Estes valores geralmente são oferecidos como uma nova proposta ao invés dos (nullables).

Os valores nulos são problemáticos por se disfarçarem de um valor real, devido ao fluxo de um sistema, ocasionalmente pode ocorrer um acesso à um método ou propriedade de um objeto contendo o valor nulo, isso causa a exceção .

Valores opcionais também são uma forma de encapsular um dado, sem permitir que o desenvolvedor acesse esta informação quando ela não existir.

Em algumas linguagens como Haskell, por exemplo, o tipo opcional é representado pelo tipo , apesar de possuir um nome diferente, o conceito por trás é o mesmo.

Um valor opcional pode estar em um dos dois estados possíveis:

  • Contendo alguma coisa;

  • Não contendo nada.

E na implementação proposta nesta biblioteca, só é possível acessar o valor de um tipo opcional quando ele encontrar-se no estado: "Contendo alguma coisa".

Como você deve ter notado, a ideia dos tipos anuláveis e dos tipo opcional é bastante similar, mas de forma geral o tipo opcional é mais poderoso, evitando exceções e permitindo criar valores opcionais inclusive para tipos baseado em referência e não somente para tipos primitivos.

As implementações deste conceito são realizadas em duas etapas: através do tipo e do módulo .

tipos anuláveis
ArgumentNullException
Maybe
Option
Option