ページ

2015年8月25日火曜日

Elixir/Phoenixで遊ぶ 5 - Elixir基礎 型-

Elixir基礎 - No.1

ちゃんとElixirを学ぶ


Phoenixを少し触ってみたので、ちゃんとElixirを学んでみる。
  • まずは実行方法
以前インタラティクモードiexで軽く動作させてみましたが、
ファイルにコードを書いて実行させてみます。
IO.puts "Hello Elixir!!"
↑のコードを書いたファイルをsample.exsとして保存
ターミナル上で以下のように実行できる。
$ elixir sample.exs
Hello Elixir!!

Elixirの型としては以下
  1. integer
  2. float
  3. boolean
  4. atom / symbol
  5. string
  6. list
  7. tuple
integerとfloatは後々触れるとして、まずは・・・
boolean
trueとfalseの二つを値として持つ。
Elixirでは型チェックメソッドとしてis_booleanが使える
例)
iex(1)> is_boolean(false)
true
iex(2)> is_boolean(1)
false
iex(3)> is_boolean(1 == 1)
true
atom
rubyや他言語でいうところのsymbol
boleanの値はatom値と等価
iex(1)> true == :true
true
iex(2)> true == :false
false
iex(3)> is_atom(true)
true
iex(4)> is_atom(:true)
true
atomでも型チェックメソッドとしてis_atomが使える
string
ダブルクオーテーション""で囲む事でstring型として使用できる。
文字コードとしてはUTF-8。ダブルクオーテーションの文字列中に変数を挿入できる。
例)
iex(1)> "slowhand"
"slowhand"
iex(2)> name = "slowhand"
"slowhand"
iex(3)> "hello #{name}"
"hello slowhand"
上でも出てきたIOモジュールを使って出力してみる。
iex(4)> IO.puts "hi\n#{name}"
hi
slowhand
:ok
IO.putsは戻り値としてatom値の:okを返す。
文字列長を取得するには、String.lengthを使う。
また、バイト数を求めるにはbyte_sizeを使う。
例)
iex(5)> byte_size("abcあいう")
12
iex(6)> byte_size("あ")
3
iex(7)> String.length("abcあいう")
6
iex(8)> String.length("あ")
1
list
[]で囲む事でlist型となり、様々な型を挿入できる。
iex(9)> [1,true,"a",:ok]
[1, true, "a", :ok]
また++--演算子を使う事でlistの連結や差し引いたりできます。
iex(10)> [1,2,3] ++ [4,5,6]
[1, 2, 3, 4, 5, 6]
iex(11)> [10,9,8,7,6,5,4] -- [9, 7, 5]
[10, 8, 6, 4]
hdtlメソッドを使う事でlistの先頭要素と残りの要素を取得する事ができます。
ちなみに空のlistを渡すとエラーになります。 例)
iex(12)> list = [1,"a",:b,3]
[1, "a", :b, 3]
iex(13)> hd(list)
1
iex(14)> tl(list)
["a", :b, 3]
iex(15)> hd[]
** (SyntaxError) iex:15: syntax error before: ']'
※たまに数値のlistを作成するとシングルクオーテーションで囲んだ文字が出力される。
例)
iex(15)> [104, 101, 108, 108, 111]
'hello'
どうやらこれはElixirが印刷可能なASCIIコードを見ると文字として出力するらしい。
ちなみにシングルクオーテーションで囲まれた文字列とダブルクオーテーションで囲まれた文字列をElixirでは違うものとしてみる。
tuple
{}で囲む事でtuple型となる。 要素を追加した順番にインデックスが割り振られ、先頭の要素はインデックス0でアクセスできる。
例)
iex(16)> t =  {:ok, :ng}
{:ok, :ng}
iex(17)> elem(t, 0)
:ok
iex(18)> is_tuple(t)
true
iex(19)> tuple_size(t)
2
また、put_elemを使う事でtuple値に要素を追加し、新たなtuple値として返却します。
というのも、Elixirでは不変データ構造をもっている為。
今回はここまで。

0 件のコメント:

コメントを投稿