読者です 読者をやめる 読者になる 読者になる

SUB.V8OS.NET

V8OS.NET のサブブログ

Elixirを初めてさわってみて、その感想

elixirインストール

$ brew install elixir
# これ、とても時間がかかる

標準ビルドツールmixの存在

$ mix new vercheckex

これでビルドしようって思ったら、対話環境あった

$ iex
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

Hello Worldしてみる

iex(1)> IO.puts("はろーわーるど")
はろーわーるど
:ok
iex(2)> print
** (CompileError) iex:2: undefined function print/0

iex(2)> IO.puts("Hello World")
Hello World
:ok
iex(3)>

これをやってみる

(via 2016-2017年位にWeb界隈で流行りそうな言語、特にElixirについて by yodatomato)

iex(6)> 1..10 |> Enum.map &(&1 * 2) |> IO.puts
warning: parentheses are required when piping into a function call. For example:

    foo 1 |> bar 2 |> baz 3

is ambiguous and should be written as

    foo(1) |> bar(2) |> baz(3)

Ambiguous pipe found at:
  iex:6

2
4
6
8
10
12
14
16
18
20
[:ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok, :ok]
iex(7)>

出来たけど、なんかエラーでた。原因究明は後。次!

と、思ったけど対話じゃきつくなったので、ファイルで対応。拡張子は.exs。今回はfizzbuzz.exsで作成

$ cat fizzbuzz.exs
defmodule Calc do
  def doubleEven(num) when rem(num, 2) == 1, do: "odd"
  def doubleEven(num) do
    num * 2
  end
end

1..10
|> Enum.map &(Calc.doubleEven(&1))
|> IO.puts
$ elixir fizzbuzz.exs                                    1 ↵
warning: parentheses are required when piping into a function call. For example:

    foo 1 |> bar 2 |> baz 3

is ambiguous and should be written as

    foo(1) |> bar(2) |> baz(3)

Ambiguous pipe found at:
  fizzbuzz.exs:9

odd
4
odd
8
odd
12
odd
16
odd
20

出来た。またエラーが...

感想

まぁ、普通の言語。だが、関数型言語特有のワンライナーで書け、わかりやすいコードと気持ちよさ。 たまらん。

参考サイト