はじめに
Qiitaの以下の記事を見てElixirという言語を知り、気になったのでAzure VM上でElixirのコーディング環境を整えてみました。最後に簡単なプログラムも書いてみます。
Elixirとは
- 拡張しやすくメンテナンスしやすい関数型言語
- パイプライン、パターンマッチングなどの強力な記法!
- 強い動的型付け言語
- Erlang VM上で動作する
- 2012年にRuby on RailsのチームメンバーであるJosé Valimによって開発された
Elixirのコーディング環境を整える
Dockerのインストール(Ubuntu 18.04)
Dockerってほんと便利だよね!
Elixir公式のdockerイメージ
私の記事を参照してDockerをインストールする。
Elixirイメージの実行
Dockerがインストールされたあなたは、以下のコマンドを打つだけ!
docker run -it --rm elixir
iexという対話シェルが起動します。
Elixirの文法
iex(1)> 2+3
5
iex(2)> 2+3==5
true
iex(3)> 0x1f
31
上記のようにpythonのjupyter Notebookのような使い心地。
- やめたいときはCtrl+Cを2回押す
- Enterを押していくと数行にわたって入力できる
早速FizzBuzzでも書いてみよう!
FizzBuzz.exs
#! /usr/bin/env elixir
defmodule FizzBuzz do
def run(limit) do
print(1, limit)
end
defp print(n, limit) when n == limit do
cond do
rem(n, 15) == 0 -> IO.puts "#{n}: FizzBuzz"
rem(n, 5) == 0 -> IO.puts "#{n}: Fizz"
rem(n, 3) == 0 -> IO.puts "#{n}: Buzz"
true -> nil
end
end
defp print(n, limit) do
print(n, n)
print(n + 1, limit)
end
end
input = 10
FizzBuzz.run(input);
# elixir ./fizzbazz.exs で実行
# ----
# 3: Buzz
# 5: Fizz
# 6: Buzz
# 9: Buzz
# 10: Fizz
ちなみに、この記事で紹介したLispでFizzBuzzを書くと以下のような感じ。
FizzBuzz.lisp
(defun fizzbuzz (x)
(cond
((zerop (mod x 15)) "Fizzbuzz")
((zerop (mod x 3)) "Fizz")
((zerop (mod x 5)) "Buzz")
(t x)))
(defun fizzbuzz-solver (s e)
(unless (> s e)
(print (fizzbuzz s))
(fizzbuzz-solver (1+ s) e)))
(fizzbuzz-solver 1 100)
どちらの言語も色があっていいね!
fileにコードを書いて実行する
fileに記載しなくてもiexモードでもdoやendを賢く認識してくれるので、複数行にわたるコーディングは可能。空白もいらない。
iexモードではタブ補完もいい感じにきく。
elixir sample.exs
コンソール出力
IO.puts "Hello World!"
繰り返し
forやwhileはない!再帰で書くのみ!
もっと学びたい方は
Elixir School
https://elixirschool.com/ja