3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Elixir 学習記(4. パターンマッチング)

Last updated at Posted at 2023-03-06

Elixir学習記

← 前 目次 次 →
3. 演算子 4. パターンマッチング -

パターンマッチング

Elixirでは マッチ演算子= を使って、左辺と右辺のパターンマッチングができる

1 = 1
1

1 = 2
** (MatchError) no match of right hand side value: 2

x = 1
1

1 = x
1

2 = x
** (MatchError) no match of right hand side value: 1

x = 2
2

1 = y
** (CompileError) xxx : undefined function y/0 (there is no such import)
  • 左辺に変数が含まれている場合、右辺にマッチするようにバインドされる
  • 左辺と右辺が等しくないときは、MatchErrorになる
  • 定義されていない変数を右辺に置くと、関数とみなされCompileErrorになる

パターンマッチングなので、以下のような処理も可能

# まとめてバインド
{ a, b, c } = { 1, 2, 3 }
# a = 1, b = 2, c = 3

# 特定の値をバインド
{:ok, result } = {:ok, "Success"}
# result = "Success"

# 意図しない形式はエラーにする
{:ok, result} = {:error, :oops}
** (MatchError) no match of right hand side value: {:error, :oops}

左辺で指定するパターンに変数を使いたいけど、バインドはしたくないという場合
:point_right: ピン演算子^ を使う

status = :ok

{^status, result} = {:ok, "Success"}
# result = "Success"

変数のバインド以外は、何に使えるの?

こちらの記事がめちゃくちゃ分かりやすいです

パターンマッチは Elixir のあれやこれ ・・・ 変数束縛、データ型の分解、繰り返し処理、関数の選択的実行、条件分岐などの基礎をなす重要な機能のひとつである。

参考資料

感想

  • パターンマッチングを正しく理解することはElixir学習で欠かせない
  • リストの分解と再帰
    • Enum.map以外でコレクションを扱う強力な方法を知れた
  • むやみにif文を使わない
    • パターンマッチングを活用すればもっと簡潔に書けないか?を考えてみる
3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?