構造

構造体 の Elixir

21個の演習

構造体について

概要

構造体は、キーの集合があらかじめ決まった特別なマップです。

  • 構造体には、コンパイル時のチェックとデフォルト値があります。
  • 構造体の名前は、それが定義されているモジュールの名前になります。
  • 構造体を定義するには、defstruct構文を使います。
    • この構文は、通常、モジュール定義の直後に書きます。
  • defstructには、アトムのリスト(デフォルト値をnilにする場合)か、キーワードリスト(デフォルト値を指定する場合)を渡します。
    • デフォルト値のないフィールドは、デフォルト値のあるフィールドより前に置く必要があります。
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

フィールドへのアクセスと更新

  • マップを扱うほとんどの関数は、構造体でもそのまま使えます。

  • 構造体のフィールドにアクセスするには、_静的アクセス演算子_の.を使うのがおすすめです。

  • フィールドの値の取得:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • フィールドの値の更新

    plane = %Plane{}
    %{plane | wings: 4}
    # => %Plane{engine: nil, wings: 4}
    

フィールドの値の初期化を強制する

  • @enforce_keysモジュール属性を使うと、構造体を作るときに、指定したフィールドを**nil以外**の値で初期化しなければならないという実行時チェックが行われます。
  • @enforce_keysの後には、フィールドのキー(アトムです)のリストを書きます。
  • 強制されたキーが初期化されていないと、エラーが発生します。
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

構造体を学習する

練習はロックされています

構造体を練習するには、あと9個の演習のロックを解除してください