Get start Elixir vol 3

Sigils

Elixirでは、正規表現を書くときに ~r/neko/ と書きます。その ~r の書き方箇所のバリエーションや、 ~w~W などのword list、カスタムsigilsの作り方が書いていました。Rubyでも%wといったものをよく使うので、こちらも使いそうですね。

try, catch and rescueの使い方

In Elixir, we avoid using try/rescue because we don’t use errors for control flow. We take errors literally: they are reserved to unexpected and/or exceptional situations. In case you actually need flow control constructs, throws should be used. That’s what we are going to see next.

Elixirでは、try/rescueの形をあまり使わないらしいです。というのも、エラーを制御の流れ等して使わないという立ち位置だそうな。このerrorは本当にunexpectedな状態、というふうに捉えるそう。

もし想定したエラー処理を行う場合、throw/catchを使う模様。この中で、特定の値を探す、というようなよくある処理は Enum.find/2 として関数が用意もされている模様。

Elixirで、processが自然な状態で死んだ場合、 exit を送るらしいです。なので、このexitをtry/catchして何か処理を行う、というのもされます。

この exit はErlang VMで、fault tolerant systemとして重要な位置を占めるらしい。supervision tree配下のプロセスがこのexitを送ったら、そのプロセスは再起動されるらしいです。これにより、素早く落ちて立ち直る、ということができるのですね。なので、try/catchやtry/rescueよりもexitを積極的に使うと。あと、何かのあとに必ず実行するために、 try/after が用意されています。

Typespecs and behaviours

@spec でspecificationを定義して、その下側でdefで定義する。 @type@type number_with_offense :: {number, String.t} のようにすることで、カスタム型を定義して使い回すことが可能。と。

Behaviourの説明もあるのですが、英国英語ってのが何気に趣がありますね。

defmodule Parser do
  use Behaviour

  defcallback parse(String.t) :: any
  defcallback extensions() :: [String.t]
end

のように定義されたBehaviourは、

defmodule Neko do
  @behaviour Parser

  def parse(str), do: # ... parse JSON
  def extensions, do: ["json"]
end

のように定義することができる。

そしてMix and OPTへ…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s