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

Dia dos Namorados

Exercício de aprendizagem

Introdução

Tipos personalizados

Os tipos personalizados são a forma como novos tipos de dados são definidos em Gleam. Eles podem ter várias variantes, cada uma com seu próprio nome.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Cada caso de um tipo personalizado pode, opcionalmente, carregar algum dado, e casos diferentes podem ter tipos de dados diferentes. Quando uma variante carrega dados, ela é chamada de registro.

pub type Number {
  SomeInt(Int)
  SomeFloat(Float)
  Invalid
}

É possível criar um valor para um caso específico referindo-se ao seu nome, se ele não tiver dados adicionais (Spring), ou chamando-o como uma função, se tiver (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

Os tipos personalizados, assim como tudo em Gleam, têm igualdade estrutural, o que significa que dois valores da mesma variante e com os mesmos dados são equivalentes.

Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False

É possível fazer pattern matching nas variantes de um tipo personalizado usando expressões case.

import gleam/int
import gleam/float

pub fn describe(flexible_number: Number) -> String {
  case flexible_number {
    SomeFloat(f) -> "Float: " <> float.to_string(f)
    SomeInt(i) -> "Int: " <> int.to_string(i)
    Invalid -> "Neither a float nor an int"
  }
}

Instruções

Neste exercício, é Dia dos Namorados e você e seu parceiro estão planejando fazer algo legal juntos. Seu parceiro tem muitas ideias e agora está pedindo que você avalie as ideias, para encontrar a atividade a fazer.

As seguintes ideias são propostas pelo seu parceiro:

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

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

1. Defina a aprovação

Para cada ideia que seu parceiro propõe, você responde com uma das três opções: sim, não ou talvez.

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

2. Defina as culinárias

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

Defina o tipo customizado Cuisine para representar essas culinárias como os dois casos a seguir: Korean e Turkish.

3. Defina os gêneros de filme

Há uma infinidade de filmes para escolher, então, para restringir as opções, seu parceiro também lista o gênero.

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

4. Defina a atividade

Como dito, seu parceiro teve cinco atividades diferentes: jogar um jogo de tabuleiro, relaxar, assistir a um filme, ir a um restaurante e dar um passeio.

Defina o tipo customizado Activity para representar esses tipos de atividade:

  • BoardGame: sem dados associados.
  • Chill: sem dados associados.
  • Movie: tem seu Genre como dado associado.
  • Restaurant: tem sua Cuisine como dado associado.
  • Walk: tem um Int representando o número de quilômetros a caminhar como dado associado.

5. Avalie a atividade

Por fim, você está pronto para avaliar as ideias do seu parceiro. É assim que você se sente sobre a ideia do seu parceiro:

  • Jogar um jogo de tabuleiro: não.
  • Relaxar: não.
  • Assistir a um filme: sim se for um filme romântico; caso contrário, não.
  • Ir a um restaurante: sim se a culinária for coreana, talvez se for turca.
  • Dar um passeio: sim se o passeio for de mais de onze quilômetros; talvez se for de mais de seis quilômetros; caso contrário, não.

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

rate_activity(Restaurant(Turkish))
// -> Maybe
Editar via GitHub O link abre em uma nova janela ou aba
Gleam Exercism

Tudo pronto para começar Dia dos Namorados?

Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.