Percursos
/
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 de definir novos tipos de dados em Gleam. Podem ter várias variantes, cada uma com o seu próprio nome.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Cada caso de um tipo personalizado pode, opcionalmente, conter alguns dados, e casos diferentes podem ter tipos de dados diferentes. Quando uma variante contém dados, chama-se registo.

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

Podes criar um valor para um caso específico indicando o 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, tal 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

Podes fazer correspondência de padrões com as 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, é o Dia dos Namorados e tu e o teu parceiro estão a planear fazer algo agradável juntos. O teu parceiro tem imensas ideias e está agora a pedir-te para avaliares as ideias, para encontrarem a atividade em que vão participar.

O teu parceiro propõe as seguintes ideias:

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

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 parceiro propõe, respondes com uma de três opções: sim, não ou talvez.

Define o tipo personalizado Approval para representar estas opções como os três casos seguintes: Yes, No e Maybe.

2. Define as cozinhas

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

Define o tipo personalizado Cuisine para representar estas cozinhas como os dois casos seguintes: Korean e Turkish.

3. Define os géneros de filmes

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

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

4. Define a atividade

Como já foi dito, o teu parceiro propôs cinco atividades diferentes: jogar um jogo de tabuleiro, relaxar, ver um filme, ir a um restaurante e dar um passeio.

Define o tipo personalizado Activity para representar estes tipos de atividade:

  • BoardGame: sem dados associados.
  • Chill: sem dados associados.
  • Movie: tem o Genre como dados associados.
  • Restaurant: tem o Cuisine como dados associados.
  • Walk: tem um Int que representa o número de quilómetros a percorrer como dados associados.

5. Avalia a atividade

Por fim, chegou a altura de avaliares as ideias do teu parceiro. É assim que te sentes em relação à ideia do teu parceiro:

  • Jogar um jogo de tabuleiro: não.
  • Relaxar: 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.
  • Dar um passeio: sim, se o passeio tiver mais de onze quilómetros; talvez, se tiver mais de seis quilómetros; caso contrário, não.

Implementa uma função chamada rate_activity que recebe um Activity e devolve o Approval com base nos sentimentos acima:

rate_activity(Restaurant(Turkish))
// -> Maybe
Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

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

Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.