Link do estudo: https://www.youtube.com/watch?v=i3yHzxT_Oj8
- Como vimos no último estudo, o Option é um sum type que representa a possibilidade de ausência de um valor.
- Desta forma, ele tem uma semântica parecida com a do
Null
. - Vamos ver um caso de uso:
- Dentro da nossa aplicação, queremos imprimir o nome do usuário da sessão ativa.
- Podemos usar a função
getSession()
, que retorna umOption<Session>
. - Problema: acessar o valor “interno” do Option.
- O Option “esconde” o valor interno por segurança.
- Principal solução: checagem exaustiva
- Checagem exaustiva é uma característica dos sum types em linguagens funcionais.
- Checagem exaustiva é quando somos forçados em tempo de compilação a chegar todos as possibilidades de um sum type.
- Exemplo: Enum
- Enums, do Dart, possuem checagem exaustiva quando usados em um
switch-case
. - Para os casos de
if
, no entanto, não.
- Enums, do Dart, possuem checagem exaustiva quando usados em um
- Exemplo: Option e Either
- O dartz disponibiliza checagem exaustiva de seus sum types através do método
fold
.
- O dartz disponibiliza checagem exaustiva de seus sum types através do método
- Exemplo: custom sum types
- Podemos, sem dificuldade, implementar um
fold
para os nossos sum types. - Apesar de ser um processo fácil, é chato e pode tender a erros.
- Por exemplo, você pode alterar o sum type e esquecer de atualizar o método.
- Lembre-se sempre que você pode usar bibliotecas que te auxiliem na criação de sum types. Por exemplo, os unions do Freezed possuem o método
when
.
- Podemos, sem dificuldade, implementar um
- O problema do
fold
- Vamos implementar uma função que obtém a quantidade de nomes do usuário.
- Podemos usar
fold
, como vimos antes, mas o resultado fica complexo e confuso. - Como solução, vamos usar outra função que existe no Option:
map
.
- Functors
- Em Teoria das Categorias, um functor, é um mapeamento entre categorias.
- Destaque no termo “mapeamento”.
- Na prática, functors possuem dois conceitos principais:
- Eles são como contêineres.
- Eles possuem uma função de mapeamento.
- Mapeamento:
- Dado um functor
F
sobre um tipoa
(F a
) e uma funçãoa → b
, retorna o mesmo functor sobre o tipob
(F b
).
- Dado um functor
- Exemplo 1: o functor mais simples (Id)
- Exemplo 2: o functor Option.
- Exemplo 3: o functor Either.
- Exemplo 4: functors na stdlib.
- Em Teoria das Categorias, um functor, é um mapeamento entre categorias.
- Proof by exhaustion: o fundamento por trás do exhaustive checking.
- Functors (Overview)
- Functors (Teoria da Categoria)