この投稿は続きです。まだElixirのモジュールについて①を読んでいなければ
そちらから読み始めることを推奨します。
Elixir勉強中の新高専生、Nyayutaです。
学校が始まり、忙しくなってきました。
前回の続きからはじめます。
標準モジュール
ここの続きです。
IO
IOは入出力を扱うモジュール。
Input/Output(入力/出力)の略称でIOです
関数の例は
puts:文字列を出力する
WindowsにElixirを導入するでも少し触ったやつです。
IO.puts(出力デバイス,なんとか)
という感じで使います。
出力デバイスはデフォルトで:stdio
で、省略もできるらしい。
成功すると:ok
と出る
inspect:値を文字列に変換、出力する
名前とその値を結びつけるような関数
本書の例に則ると
iex(1)> ([1, 2, 3]
...(1)> |> IO.inspect(label: "before")
...(1)> |> Enum.map(&(&1 * 2))
...(1)> |> IO.inspect(label: "after")
...(1)> |> Enum.sum())
[1,2,3]という、数列に"before"という名前を付けて、それぞれ2倍して、その結果に"after"という名前を付け、最後にafterの中身をすべて足すというプログラムのようです。
余談ですが、パイプ演算子を見落としたせいでかなりつまずいていました。(質問により解決)
read:文字列を読み込む
inspectとは逆に、入力した文字列に名前を付ける関数
本書では、exsファイルを用いて
IO.puts "お名前を入力してください"
name = IO.read(:line)
IO.puts "Hello!, #(name)"
入力された文字列にnameという名前を付けて、Hello!するプログラムのようです。
Enum
Enumはコレクションを扱う関数。
Enumは日本語にすると"列挙"という意味のようです
関数の例は
map:各要素を変換する関数
inspectの説明でも使っていた関数です。
その時には、[1,2,3]というコレクションのそれぞれを2倍するのに使っていました。
このように、各要素それぞれに対してアクションを行う関数のようです
filter・reject:フィルタリングする
filterは指定された条件になるもの、rejectは指定された条件にならないものをフィルタリングします。
本書の例では、
Enum.filter ([1, 2, 3], fn x -> rem(x, 2) == 0 end)
これは2で割ったとき余りが0のものを[1,2,3]の中からフィルタリング
つまり偶数だけを出力するプログラムのようです
Enum.reject ([1, 2, 3], fn x -> rem(x, 2) == 0 end)
同様に、これは2で割ったとき余りが0にならない、つまり奇数だけを出力するプログラムのようです
all?・any?:条件を検証する
all?は条件がすべてに当てはまる場合にtrueを、一つでも当てはまらないとfalseを出力する関数
any?は、どれか一つに当てはまったらtrueを、一つも当てはまらないとfalseを出力する関数
min・max:最小・最大値を取得する
Excelとかにもあるやつですね。
リストの中から最小・最大を見つけ出してくれます。
reduce:畳み込みを行う
ファイルの圧縮と似た感じの関数です。
例えば
dog,cat,dog,dog,cat,dog,dog,dog,cat,cat,cat
みたいな列があるとき、下のような感じに変わります
dog:6,cat:6
おわりに
また途中で切ります
書き始めた当初はこんなに長くなるとは思いませんでした。
この後に出るであろう第三弾も読んでくださると幸いです。
間違いがあれば指摘してください。
つたない文章ですが、読了ありがとうございました。