Percursos
/
Gleam
Gleam
/
Exercícios
/
Limpeza da Primavera
Limpeza da Primavera

Limpeza da Primavera

Exercício de aprendizagem

Introdução

Asserções let

Quando fazemos correspondência de padrões com um valor em Gleam, temos de garantir que os padrões correspondem a todos os valores possíveis do tipo; caso contrário, o código não compila.

Esta função deve 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 maioria das vezes, em programas em Gleam, queremos tratar todos os casos possíveis, mas em alguns programas, como protótipos e scripts rápidos, podemos querer focar-nos apenas no caminho principal e não escrever código para os outros casos. É aqui 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 rebenta. Com 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
}

As bibliotecas Gleam nunca devem usar asserções let, pois podem fazer o programa rebentar. Em vez disso, devem usar o tipo Result e deixar o programador da aplicação decidir como tratar os erros.

Instruções

A Mika, organizadora de eventos, foi promovida no trabalho e, como parte das suas novas responsabilidades, ficou responsável pela base de dados de eventos. Reparou rapidamente que muitos dos dados estão guardados de formas que os tornam difíceis de manipular, por isso vão juntar-se para os limpar com um script que só vai ser executado uma vez.

Como o script só vai ser executado uma vez e tens confiança na estrutura dos dados, achas que é um bom sítio para usar as let assertions do Gleam.

1. Extrair os erros

Cada evento passado tem uma lista de problemas que ocorreram durante o evento. Estes foram guardados como resultados, mas são sempre a variante Error.

Implementa a função extract_error, que recebe um resultado que se espera ser sempre um Error e devolve o valor de erro contido.

extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"

2. Remover o prefixo de equipa

Os nomes das equipas têm o prefixo "Team ", mas isso não é necessário. Implementa a função remove_team_prefix para remover o prefixo de um nome de equipa.

remove_team_prefix("Team Turtle")
// -> "Turtle"

3. Separar a região e a equipa

Cada evento é executado por uma equipa e cada equipa pertence a uma região. Na base de dados, estão guardados numa única string, separados por uma vírgula.

Implementa a função split_region_and_team para dividir a string num tuplo de duas strings, uma para a região e outra para a equipa. O prefixo "Team " deve ser removido do nome da equipa.

split_region_and_team("East,Team Orange")
// -> #("East", "Orange")
Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

Estás pronto para começar Limpeza da Primavera?

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