Percursos
/
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. 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 na vida real, o que não deixa espaço para dados inválidos e torna impossível representar estados impossíveis no código.

type Season
    = Spring
    | Summer
    | Autumn
    | Winter

Cada caso de um tipo personalizado pode ter, opcionalmente, dados associados, e casos diferentes podem ter tipos de dados diferentes. Se nenhum dos casos tiver dados associados, a união discriminada é semelhante ao 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 ao indicar o seu nome (Spring), quando este é definido no mesmo módulo, ou é importado com a sintaxe import SeasonModule exposing (Season(..)), ou ao indicar o seu nome totalmente qualificado (Season.Spring) quando é importado com a sintaxe import SeasonModule exposing (Season).

integerTwo = Integer 2
invalid = FlexibleNumber.Invalid

Os tipos personalizados, tal 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 tu e o teu par estão a planear fazer algo agradável juntos. O teu par tem imensas ideias e agora está a pedir-te que as avalies, para descobrirem a atividade em que vão participar.

O teu par propõe as seguintes ideias:

  • Jogar um jogo de tabuleiro
  • Descontrair
  • Ver um filme
  • Ir a um restaurante

Tens seis tarefas para ajudar a escolher a tua atividade do Dia dos Namorados.

1. Define a aprovação

Para cada ideia que o teu par propõe, respondes com uma de três opções: sim, não ou talvez.

Define o Custom Type Approval para representar estas opções com os três casos seguintes: Yes, No e Maybe.

2. Define as cozinhas

O teu par escolheu dois restaurantes possíveis: um de cozinha coreana e outro de cozinha turca.

Define o Custom Type Cuisine para representar estas cozinhas com os dois casos seguintes: Korean e Turkish.

3. Define os géneros de filmes

Há imensos filmes por onde escolher, por isso, para reduzir as opções, o teu par indica também o género.

Define o Custom Type Genre para representar os géneros seguintes como casos: Crime, Horror, Romance e Thriller.

4. Define a atividade

Como foi dito, o teu par apresentou cinco atividades diferentes: jogar um jogo de tabuleiro, descontrair, ver um filme e ir a um restaurante.

Define o Custom Type Activity para representar estes tipos de atividade:

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

5. Avalia a atividade

Finalmente, estás pronto para avaliar as ideias do teu par. É assim que te sentes em relação à ideia do teu par:

  • Jogar um jogo de tabuleiro: não.
  • Descontrair: não.
  • Ver um filme: sim, se for um filme romântico; caso contrário, não.
  • Ir a um restaurante: sim, se a cozinha for coreana; talvez, se for turca.

Implementa uma função chamada rateActivity que recebe um valor Activity e devolve o Approval com base nas preferências acima:

rateActivity (Restaurant Turkish)
-- => Maybe
Editar via GitHub A ligação abre numa nova janela ou separador
Elm Exercism

Estás pronto para começar Dia dos Namorados?

Inscreve-te no Exercism para aprenderes e dominares Elm com 28 conceitos110 exercícios, e mentoria humana real, tudo grátis.