LoginSignup
7
1

More than 1 year has passed since last update.

簡単Elixirシリーズ ~ Processを使ってCounterを作ろう! ~

Posted at

簡単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といった抽象化されたモジュールの関数を利用して実装するのがオススメです。

と偉い人が言っておりました。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1