簡単Elixirシリーズ
Processを使ってCounterを作ろう!
東京にいるけどfukuokaexのYOSUKEです。
最近、エリクサーちゃんで学ぶ Elixirの動画を作成し始めてるので良かったらチャンネル登録お願いします。本格的に始動するのは年明けからの予定です。
今回は、Processを使ってCounterを作ろう!という小ネタ。(そう、この記事はサクッとがコンセプトW)
Elixirのプロセスについて知りたい人はこちらから見てください。
|> ~ プロセスを知ろう① ~
|> ~ プロセスを知ろう② ~
|> ~ プロセスを知ろう③ ~
プロセスを生成して、カウンターをスタートすると、メッセージで送った数値を受け取って値を表示し、500ミリ秒待って、再度その値に+1をして自分にメッセージを自分自身のプロセスに再度送っています。その後、strat()を再度呼び出して、プロセスを継続する処理を書いてます。
defmodule Counter do
def start_link() do
spawn(ProcessCounter, :counter, [])
end
def start() do
receive do
value ->
IO.puts(value)
Process.sleep(500)
send(self(), value + 1)
end
start()
end
end
実際に使ってみましょう。 PS, 止める時はProcess.exit(pid, :ok)
を呼び出すと止まります。
iex()> pid = Counter.start_link()
#PID<0.122.0>
iex()> send(pid, 1)
1
1
2
3
4
5
iex()> Process.exit(pid, :ok)
true
プロセスを使った永続的な処理の例でした。
ただ、プロセスはElixirの関数を利用した実装より複雑になりすぎることがあるので、GenServerやAgent,Taskといった抽象化されたモジュールの関数を利用して実装するのがオススメです。
と偉い人が言っておりました。