基本的な型

Elixirは動的型付け言語.宣言をする必要は無いが,言うまでも無くどんな型があるかは知っておく必要がある.この節では型について語る.

数値

数値で用いられる型は以下.他言語と比較して特筆するような特徴は無いと思う.

iex> 1      # integer
iex> 0b11   # integer. 2進数
iex> 0o11   # integer. 8進数
iex> 0x1F   # integer. 16進数
iex> 1.0    # float.Elixirのfloatは64bitの倍精度浮動小数点数

boolean

こちらも特に変わったことは無い.

iex> true
iex> false

文字を取り扱う型

Elixirではシングルクォーテーション'を使う場合とダブルクォーテーションを使う場合"で取り扱いが明確に異なる.基本的にはダブルクォーテーションを使っていれば良い.稀にシングルクォーテーションを使うことがある.

iex> "string"  # 文字列
iex> 'string'  # キャラクタリスト

アトム

説明だけだと概念が理解しにくいが大事な型.他言語ではシンボルと呼ばれていることがある.

iex> :someatom
  • アトムは:から始まる名前付きの値.
  • 実体がVM内でただ1つであるという特徴がある.
    • この特性を生かして,関数名の内部表記や予約語の取り扱いで用いられている
    • 例えば,nil(Elixirでのnull)は内部的に:nilとなっている
  • 一度生成されたAtomはVMから消えないと言う特徴を持つ
    • つまり動的にガンガン作ってしまうと危険
    • かといって手動で作るときに節約するとかは意識しなくてOK(数万個オーダーの話なので)
iex> :apple == :apple
true
iex> :apple == :orange
false
iex> nil == :nil
true

リスト

他言語の配列みたいなもの.

iex> [1, 2, 3]
iex> [1, "a", :b]  # 異なる型でも同居できる

タプル

値を組み合わせた型.他言語のタプルと同じ

iex> {1, 3}
iex> {1, "a"}  # 異なる型でも同居できる

慣れていない場合,リストとタプルでどちらを選ぶべきか迷うことがある.とりあえずは以下の認識で使い分ければ良い.

  • 長さが可変なものにはリストを用いる
    • e.g.) ユーザーの一覧(何人分のデータが入るかわからない.固定されていても仕様変更で長さが変わるかも)
  • 長さが固定なものにはリストを用いる
    • e.g.) 平面の座標(概念的にそもそも不変.3次元のデータに変更するといった場合,そもそも処理や変数の命名が根本的に異なる)

マップ

keyとvalueの組み合わせを集めたもの.辞書型とも呼ばれる.

  • keyとvalueにはどのような型でも用いることができる
  • keyの重複は出来ない.
    • 重複した場合,どちらかの値だけしか残らない
    • 仕様的に不定のため,統一を期待して使うべきではない
iex> %{"key" => "value", 1 => :a}

keyに用いるのがアトムだけの場合,省略記法を用いる事ができる

iex> %{a: "a", b: "b"}
iex> %{a: "a", b: "b"} == %{:a => "a", :b => "b"}
true

results matching ""

    No results matching ""