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についてはこちらを参照してください。