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"
}
}
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:
Você tem seis tarefas para ajudar a escolher a atividade do Dia dos Namorados.
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.
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.
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.
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.Por fim, você está pronto para avaliar as ideias do seu parceiro. É assim que você se sente sobre a ideia do seu parceiro:
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
Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.