1_6.EnumとStreamとFlow - ohr486/ErlangElixirFestHandsOn GitHub Wiki
1_6.EnumとStreamとFlow
Enum
あるコレクションに対して即座に処理が実行される操作を、先行(eager)処理と言います。 elixirで先行処理を行う場合、Enumモジュールを使います。
ハンズオンで利用する関数は
-
Enum.map
-
Enum.filter
-
Enum.count
の3つです。
Stream
あるコレクションに対して必要になるまで処理が実行されないような操作を、遅延(lazy)処理と言います。 elixirで遅延処理を行う場合、Streamモジュールを使います。
StreamはEnumと同じ操作を多く共有します。
-
Stream.map
-
Stream.filter
EnumとStreamは先行処理されるか、遅延処理されるかが異なります。 Enumは一度に全てのデータをメモリに読み込むのに対して、Streamは必要な分だけメモリに読み込むので、一般的にStreamのほうがメモリ効率が良いです。
Flow
FlowはEnumとStream同様に、コレクションに対する操作を提供します。 EnumとStreamがシングルスレッドで実行されるのに対して、Flowは並列に処理が実行されます。 また、Flowは標準モジュールではなくライブラリとして提供されます。
ハンズオンで利用する関数は
-
Flow.map
-
Flow.filter
-
Flow.from_enumerable
-
Flow.partition
の4つです。
Flowについてはこちらを参照してください。