Quando facciamo pattern matching su un valore in Gleam, dobbiamo assicurarci che i pattern coprano ogni possibile valore del tipo, altrimenti il codice non verrà compilato.
Questa funzione dovrebbe essere rifiutata, perché non ha gestito il caso in cui la lista è vuota:
pub fn get_first_element_or_crash(items: List(e)) -> e {
case items {
[item, ..] -> item
}
}
Nella maggior parte dei programmi Gleam vogliamo gestire ogni caso possibile, ma in alcuni programmi, come i prototipi e gli script rapidi, potremmo voler concentrarci solo sul percorso principale e non scrivere codice per gli altri casi. È qui che entra in gioco let assert di Gleam.
Con le let assertion un pattern può corrispondere solo ad alcuni dei possibili valori di un tipo e, se il pattern non corrisponde a nessun valore, il programma andrà in crash. Usando let assert possiamo scrivere la funzione qui sopra così:
pub fn get_first_element_or_crash(items: List(e)) -> e {
let assert [item, ..] = items
item
}
Le librerie Gleam non dovrebbero mai usare le let assertion, perché possono mandare in crash il programma. Dovrebbero invece usare il tipo Result e lasciare che lo sviluppatore dell'applicazione decida come gestire gli errori.
Mika, l'organizzatrice di eventi, ha ottenuto una promozione al lavoro e, come parte delle sue nuove responsabilità, ora si occupa del database degli eventi. Ha subito notato che molti dati sono memorizzati in modi che li rendono difficili da usare, quindi fate squadra per ripulirli con uno script da eseguire una volta sola.
Dato che lo script verrà eseguito una sola volta e hai fiducia nella struttura dei dati, ritieni che questo sia il momento giusto per usare le let assertions di Gleam.
Ogni evento passato ha un elenco di problemi che si sono verificati durante l'evento. Sono stati memorizzati come result, ma sono sempre la variante Error.
Implementa la funzione extract_error, che accetta un result che ci si aspetta sia sempre un Error e restituisce il valore di errore contenuto.
extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"
I nomi dei team hanno il prefisso "Team ", ma non è necessario. Implementa la funzione remove_team_prefix per rimuovere il prefisso dal nome di un team.
remove_team_prefix("Team Turtle")
// -> "Turtle"
Ogni evento è gestito da un team, e ogni team appartiene a una regione. Nel database sono memorizzati in un'unica stringa, separati da una virgola.
Implementa la funzione split_region_and_team per dividere la stringa in una tupla di due stringhe, una per la regione e una per il team. Il prefisso "Team " va rimosso dal nome del team.
split_region_and_team("East,Team Orange")
// -> #("East", "Orange")
Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.