基本的な型
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