どうも、靖宗です。
今回はErlang librariesとのことで、ErlangVM上で走ってるElixirならではといったところでしょうか。
ただ、ライブラリの紹介なんてのはドキュメントを見れば良いので、あまり深入りはせずサクッと終わらせます。
- The binary module
- Formatted text output
- The crypto module
- The digraph module
- Erlang Term Storage
- The math module
- The queue module
- The rand module
- The zip and zlib modules
ここで紹介する以上のもの知りたければErlangのドキュメントを見るのがよさそうです。
全体的にそうなんですが、Erlangのライブラリを使用したモジュール名はアトムっぽくなってます。
The binary module
Stringモジュールとはちょっと違うやつ。
iex> String.to_charlist "Ø" [216] iex> :binary.bin_to_list "Ø" [195, 152]
たぶん6章で悩んだ奴。
UTF-8でエンコードすると[216]
だけど、実際は[195, 152]
として文字コードは扱われてるよって感じだったと思います。文字コードに詳しくないので間違ってたらすんません・・・
まぁ、とりあえずそういう奴を取り扱うモジュール。
Formatted text output
なんかprintf
っぽいやつ。
iex> :io.format("Pi is approximately given by:~10.3f~n", [:math.pi]) Pi is approximately given by: 3.142 :ok iex> to_string :io_lib.format("Pi is approximately given by:~10.3f~n", [:math.pi]) "Pi is approximately given by: 3.142\n"
変数なんかをフォーマットして文字列に変換したいときとかに使う。
The crypto module
ハッシュ化とかのモジュール?
iex> Base.encode16(:crypto.hash(:sha256, "Elixir")) "3315715A7A3AD57428298676C5AE465DADA38D951BDFAC9348A8A31E9C7401CB"
なんかデフォルトのモジュールじゃないらしく、使用する際にはmix.exs
に下記を追記する必要があるとのこと。
def application do [extra_applications: [:crypto]] end
mix
もまだ習ってないので「ふーん」ぐらいで終わらす。
The digraph module
('ω')。o(????????????)
たぶん、有向非巡回グラフ(DAG)のこと?よくわかんない・・・
深入りしないと決めたのでスルー
Erlang Term Storage
これ後でETS
として出てきてるっぽいのでスルー。
The math module
名前でなんとなく分かりますが数学系のモジュールでしょう。
iex> angle_45_deg = :math.pi() * 45.0 / 180.0 iex> :math.sin(angle_45_deg) 0.7071067811865475 iex> :math.exp(55.0) 7.694785265142018e23 iex> :math.log(7.694785265142018e23) 55.0
The queue module
いわゆるキューの処理(先入れ先出しとか)を実現する為のモジュール。
並列処理とかの時にも使うかも?
iex> q = :queue.new iex> q = :queue.in("A", q) iex> q = :queue.in("B", q) iex> {value, q} = :queue.out(q) iex> value {:value, "A"} iex> {value, q} = :queue.out(q) iex> value {:value, "B"} iex> {value, q} = :queue.out(q) iex> value :empty
The rand module
乱数生成のモジュール。シード値を与えたりできるっぽい。
iex> :rand.uniform() 0.8175669086010815 iex> _ = :rand.seed(:exs1024, {123, 123534, 345345}) iex> :rand.uniform() 0.5820506340260994 iex> :rand.uniform(6) 6
The zip and zlib modules
zipファイルを読み込んだり書き込んだり展開したりするモジュール?
内部に含まれてるファイル数のカウントの例があります。
iex> :zip.foldl(fn _, _, _, acc -> acc + 1 end, 0, :binary.bin_to_list("file.zip")) {:ok, 633}
あとは圧縮したり、展開したり。
iex> song = " ...> Mary had a little lamb, ...> His fleece was white as snow, ...> And everywhere that Mary went, ...> The lamb was sure to go." iex> compressed = :zlib.compress(song) iex> byte_size song 110 iex> byte_size compressed 99 iex> :zlib.uncompress(compressed) "\nMary had a little lamb,\nHis fleece was white as snow,\nAnd everywhere that Mary went,\nThe lamb was sure to go."
この章はあとで見直す用でしょうか?
やはりそのうちErlangを学ぶ必要がありそうな・・・