もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

Elixir 入門 その1 - REPL と 基本型

ElixirのページのGetting Startedを適当にサマってます。自分用メモ。間違ってたらコメントくらさい

REPL

  • iexで起動。 hでHelp見える。
h is_boolean/1

基本型

Integer

1 # integer
1.0 # float

Booleans

  • true / false

Atoms

  • symbolみたいなの。名前をそのまま値として扱う
  • true/falseは実はAtomなので実態は :true :false
:hello

Strings

  • "" で囲む。基本はUTF-8
  • String内に変数や式の結果を埋め込むことができる。#{}で囲む。
"hello"
"hello #{:world}"

Anonymous functions

  • 無名関数。Elixirにおける関数はファーストクラス = それ自体を関数の結果としたり引数としたりすることができる。
  • fn で始まり end で終わる
  • 使うときは variable.(args)
add = fn a, b -> a + b end
add.(1, 2)

add_two = fn a -> add.(a, 2) end
add_two.(3)

# 即時実行
(fn x -> x * 2 end).(39)

Lists

  • ブラケットで囲んだものはListに。
  • 型は問わないので、integer, booleanのようなものも可能
  • LinkListの形でメモリ上に保存されていて個々の要素が値と次の要素のポインタを持っている。
    • なのでリストの後ろに要素を追加する場合は先頭からなめていくのでおそい。同じ理由で先頭に追加する場合ははやい。
  • ++ で結合、 -- で除外
  • 数値のListだとたまに '' で囲まれた値を返すことがある。リスト内の数値がすべてASCII 文字コードと一致した場合はcharのListとして出力される。
[1, 2, 3]

# これは'hello'になる
[104, 101, 108, 108, 111]

# これは数値列になる
[104, 101, 108, 108, 111, 0]

# これは'hello'になる
[104, 101, 108] ++ [108, 111]

Tuples

  • curly brackets で囲むとTupleを定義することができる。K-Vのような形
  • Listと違い、インデックスを使うように要素にアクセスするので早い
  • 更新する場合は部分的な更新にはならずTuple全体がコピーされるので負荷の高い処理となる。
{:ok, "hello"}