Ao fazer correspondência de padrões com um valor em Gleam, precisamos garantir que os padrões cubram todos os valores possíveis do tipo; caso contrário, o código não compila.
Esta função deveria ser rejeitada, pois não trata o caso em que a lista está vazia:
pub fn get_first_element_or_crash(items: List(e)) -> e {
case items {
[item, ..] -> item
}
}
Na maior parte do tempo, em programas Gleam queremos tratar todos os casos possíveis, mas em alguns programas, como protótipos e scripts rápidos, talvez queiramos focar apenas no caminho feliz e não escrever código para os outros casos. É aí que entra o let assert do Gleam.
Com as asserções let, um padrão pode corresponder apenas a alguns dos valores possíveis de um tipo e, se o padrão não corresponder a um valor, o programa quebra. Usando let assert, podemos escrever a função acima assim:
pub fn get_first_element_or_crash(items: List(e)) -> e {
let assert [item, ..] = items
item
}
Bibliotecas Gleam nunca devem usar asserções let, pois elas podem quebrar o programa. Em vez disso, devem usar o tipo Result e deixar que quem desenvolve a aplicação decida como tratar os erros.
Mika, a organizadora de eventos, foi promovida no trabalho e, como parte de suas novas responsabilidades, agora é ela quem cuida do banco de dados de eventos. Ela logo percebeu que muitos dos dados estão armazenados de formas que dificultam o trabalho, então vocês vão se juntar para limpá-los com um script de uso único.
Como o script vai rodar só uma vez e você conhece bem a estrutura dos dados, este é um bom lugar para usar as let assertions do Gleam.
Cada evento passado tem uma lista de problemas que ocorreram durante o evento. Eles foram armazenados como results, mas são sempre a variante Error.
Implemente a função extract_error, que recebe um result que deve ser sempre um Error e retorna o valor de erro contido nele.
extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"
Os nomes das equipes foram prefixados com a palavra "Team ", mas isso não é necessário. Implemente a função remove_team_prefix para remover o prefixo do nome de uma equipe.
remove_team_prefix("Team Turtle")
// -> "Turtle"
Cada evento é organizado por uma equipe, e cada equipe pertence a uma região. No banco de dados, eles ficam armazenados em uma única string, separados por uma vírgula.
Implemente a função split_region_and_team para dividir a string em uma tupla de duas strings, uma para a região e outra para a equipe. O prefixo "Team " deve ser removido do nome da equipe.
split_region_and_team("East,Team Orange")
// -> #("East", "Orange")
Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.