トラック
/
Gleam
Gleam
/
演習
/
春の大掃除
春の大掃除

春の大掃除

学習演習

はじめに

letアサーション

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アサーション_を使うのにぴったりの場面だと感じるでしょう。

1. エラーを取り出す

過去の各イベントには、開催中に発生した問題のリストがあります。これらはResultとして保存されていますが、常にErrorバリアントです。

extract_error関数を実装してください。この関数は、常にErrorであると想定されるResultを受け取り、含まれているエラーの値を返します。

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

2. チームの接頭辞を取り除く

チーム名には"Team "という接頭辞が付いていますが、これは不要です。チーム名から接頭辞を取り除くremove_team_prefix関数を実装してください。

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

3. 地域とチームを分割する

各イベントはチームによって運営され、各チームは地域に所属しています。データベースでは、これらはカンマで区切られた1つの文字列として保存されています。

split_region_and_team関数を実装して、文字列を2つの文字列のタプルに分割してください。1つは地域用、もう1つはチーム用です。チーム名から"Team "という接頭辞を取り除く必要があります。

split_region_and_team("East,Team Orange")
// -> #("East", "Orange")
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Gleam Exercism

春の大掃除を始める準備はできましたか?

Exercismに登録すれば、33個のコンセプト122個の演習、そして本物の人間によるメンタリングとともに、Gleamを学んでマスターできます。すべて無料です。