Trilhas
/
Elm
Elm
/
Exercícios
/
Dia dos Namorados
Dia dos Namorados

Dia dos Namorados

Exercício de aprendizagem

Introdução

Tipos personalizados

Tipos personalizados em Elm representam um número fixo de casos nomeados. Cada valor corresponde exatamente a um dos casos nomeados.

Um tipo personalizado é definido com a palavra-chave type e exige muito pouca sintaxe. Eles são uma das técnicas mais importantes da programação em Elm, e são usados para fazer com que os valores possíveis no código correspondam exatamente aos valores válidos da vida real, o que não deixa espaço para dados inválidos e faz com que estados impossíveis não possam ser representados no código.

type Season
    = Spring
    | Summer
    | Autumn
    | Winter

Cada caso de um tipo personalizado pode, opcionalmente, ter dados associados a ele, e casos diferentes podem ter tipos diferentes de dados. Se nenhum dos casos tiver dados associados, a união discriminada é parecida com o que outras linguagens costumam chamar de enumeração (ou enum).

type FlexibleNumber
    = Integer Int
    | Float Float
    | Invalid

Criar um valor para um caso específico pode ser feito referindo-se ao seu nome (Spring), quando ele é definido no mesmo módulo, ou é importado com a sintaxe de estilo import SeasonModule exposing (Season(..)), ou referindo-se ao seu nome totalmente qualificado (Season.Spring) quando importado com a sintaxe de estilo import SeasonModule exposing (Season).

integerTwo = Integer 2
invalid = FlexibleNumber.Invalid

Os tipos personalizados, assim como tudo em Elm, têm igualdade estrutural, o que significa que dois valores para o mesmo caso e com os mesmos dados (opcionais) são equivalentes.

A forma preferida de trabalhar com tipos personalizados é com correspondência de padrões:

let describe flexibleNumber =
    case flexibleNumber of
        Integer i ->
            "Integer: " ++ fromInt(i)

        Float f ->
            "Float: " ++ fromFloat(f)

        Invalid   ->
            "Invalid"

Instruções

Neste exercício, é Dia dos Namorados e você e seu par estão planejando fazer algo legal juntos. Seu par tem muitas ideias e agora está pedindo que você avalie cada uma delas, para escolher qual atividade fazer.

Seu par propôs as seguintes ideias:

  • Jogar um jogo de tabuleiro
  • Relaxar
  • Assistir a um filme
  • Ir a um restaurante

Você tem seis tarefas para ajudar a escolher a atividade do Dia dos Namorados.

1. Defina a aprovação

Para cada ideia que seu par propõe, você responde com uma de três opções: yes, no ou maybe.

Defina o Custom Type Approval para representar essas opções com os três casos a seguir: Yes, No e Maybe.

2. Defina as culinárias

Seu par selecionou dois restaurantes possíveis: um baseado na culinária coreana e o outro na culinária turca.

Defina o Custom Type Cuisine para representar essas culinárias com os dois casos a seguir: Korean e Turkish.

3. Defina os gêneros de filme

Há muitos filmes para escolher, então, para reduzir as possibilidades, seu par também lista o gênero de cada um.

Defina o Custom Type Genre para representar os gêneros a seguir como casos: Crime, Horror, Romance e Thriller.

4. Defina a atividade

Como já foi dito, seu par pensou em cinco atividades diferentes: jogar um jogo de tabuleiro, relaxar, assistir a um filme e ir a um restaurante.

Defina o Custom Type Activity para representar esses tipos de atividade:

  • BoardGame: sem dados associados.
  • Chill: sem dados associados.
  • Movie: tem o Genre como dado associado.
  • Restaurant: tem o Cuisine como dado associado.

5. Avalie a atividade

Por fim, você está pronto para avaliar as ideias do seu par. É assim que você se sente em relação à ideia do seu par:

  • Jogar um jogo de tabuleiro: no.
  • Relaxar: no.
  • Assistir a um filme: yes se for um filme romântico; caso contrário, no.
  • Ir a um restaurante: yes se a culinária for coreana, maybe se for turca.

Implemente uma função chamada rateActivity que recebe um valor Activity e retorna o Approval com base nos sentimentos acima:

rateActivity (Restaurant Turkish)
-- => Maybe
Editar via GitHub O link abre em uma nova janela ou aba
Elm Exercism

Tudo pronto para começar Dia dos Namorados?

Crie sua conta no Exercism para aprender e dominar Elm com 28 conceitos110 exercícios e mentoria humana de verdade, tudo de graça.