Gleamで値のパターンマッチを行うときは、その型で取りうるすべての値にパターンが一致するようにしなければなりません。そうでないと、コードはコンパイルされません。
この関数は、リストが空の場合を処理していないため、コンパイルエラーになります。
pub fn get_first_element_or_crash(items: List(e)) -> e {
case items {
[item, ..] -> item
}
}
Gleamのプログラムでは、ほとんどの場合、取りうるすべてのケースを処理したいと考えます。しかし、プロトタイプや簡単なスクリプトなどでは、正常系だけに注目し、それ以外のケースのコードは書きたくないこともあります。そこで登場するのが、Gleamのlet assertです。
letアサーションを使うと、パターンをその型で取りうる値の一部にだけ一致させることができます。パターンが値に一致しない場合、プログラムはクラッシュします。let assertを使うと、上の関数は次のように書けます。
pub fn get_first_element_or_crash(items: List(e)) -> e {
let assert [item, ..] = items
item
}
Gleamのライブラリでは、プログラムをクラッシュさせる可能性があるため、letアサーションを決して使うべきではありません。代わりにResult型を使い、エラーの処理方法はアプリケーションのエンジニアに任せるべきです。
イベントオーガナイザーのMikaは、仕事で昇進しました。そして、新しい職務の一環として、イベントデータベースを担当することになりました。彼女はすぐに、多くのデータが扱いにくい形で保存されていることに気づきました。そこで、二人で協力して、一度きりのスクリプトでデータを整理することにしました。
スクリプトは一度しか実行しませんし、データの構造にも確信があるので、ここはGleamの_letアサーション_を使うのにぴったりの場面だと感じるでしょう。
過去の各イベントには、開催中に発生した問題のリストがあります。これらはResultとして保存されていますが、常にErrorバリアントです。
extract_error関数を実装してください。この関数は、常にErrorであると想定されるResultを受け取り、含まれているエラーの値を返します。
extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"
チーム名には"Team "という接頭辞が付いていますが、これは不要です。チーム名から接頭辞を取り除くremove_team_prefix関数を実装してください。
remove_team_prefix("Team Turtle")
// -> "Turtle"
各イベントはチームによって運営され、各チームは地域に所属しています。データベースでは、これらはカンマで区切られた1つの文字列として保存されています。
split_region_and_team関数を実装して、文字列を2つの文字列のタプルに分割してください。1つは地域用、もう1つはチーム用です。チーム名から"Team "という接頭辞を取り除く必要があります。
split_region_and_team("East,Team Orange")
// -> #("East", "Orange")