Do you want to pick up from where you left of?
Take me there

基本

入門、基本データ型、そして基本的な演算。

入門

Elixirのインストール

各OS向けのインストール方法はElixir-lang.org上のInstalling Elixir で探すことができます。

Elixirがインストールされたら簡単にバージョンを確認できます。

% elixir -v
Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir {{ site.elixir.version }}

対話モード

ElixirにはIExという対話シェルが付属しており、入力したそばからElixirの式を評価することができるようになっています。

対話モードを開始するには、 iex を起動しましょう:

Erlang/OTP {{ site.erlang.OTP }} [erts-{{ site.erlang.erts }}] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir ({{ site.elixir.version }}) - press Ctrl+C to exit (type h() ENTER for help)
iex>

参考:Windows PowerShellの場合、iex.bat と入力する必要があります。

先に進み、試しにいくつかの簡単な式を入力してみましょう:

iex> 2+3
5
iex> 2+3 == 5
true
iex> String.length("The quick brown fox jumps over the lazy dog")
43

それぞれの式をまだ理解していなくても心配することはありませんが、イメージを掴んでもらえたらと思います。

基本データ型

整数

iex> 255
255

2進数、8進数、16進数をサポートしています。

iex> 0b0110
6
iex> 0o644
420
iex> 0x1F
31

浮動小数

Elixirでは、浮動小数点数は少なくとも1桁の数字とその後に続く小数を必要とし、64ビットの倍精度で、指数 e に対応しています:

iex> 3.14
3.14
iex> .14
** (SyntaxError) iex:2: syntax error before: '.'
iex> 1.0e-10
1.0e-10

真理値

Elixirは真理値として truefalse を提供しています。また、 falsenil 以外は真とみなされます:

iex> true
true
iex> false
false

アトム

アトムは自身の名前がそのまま値になる定数です。Rubyをご存知なら、シンボルと同義になります:

iex> :foo
:foo
iex> :foo == :bar
false

真理値の truefalse はそれぞれ、アトムの :true:false でもあります。

iex> is_atom(true)
true
iex> is_boolean(:true)
true
iex> :true === true
true

Elixirのモジュールの名前もまたアトムです。 MyApp.MyModule は、そのようなモジュールが宣言されていなくても有効なアトムです。

iex> is_atom(MyApp.MyModule)
true

アトムは、Erlangのビルトインのものも含めたライブラリのモジュールを参照するのにも使われます。

iex> :crypto.strong_rand_bytes 3
<<23, 104, 108>>

文字列

文字列はElixirではUTF-8エンコードされていて、二重引用符で囲みます:

iex> "Hello"
"Hello"
iex> "dziękuję"
"dziękuję"

文字列は改行やエスケープシーケンスに対応しています:

iex> "foo
...> bar"
"foo\nbar"
iex> "foo\nbar"
"foo\nbar"

また、Elixirにはより複雑なデータ型も含まれています。コレクション関数について学ぶときにそれらについても詳しく学びます。

基本的な演算

算術

予想されている通りかもしれませんが、Elixirは基本的な演算子である +, -, *, / を提供しています。重要なことは、/ は常にfloatを返すということです。

iex> 2 + 2
4
iex> 2 - 1
1
iex> 2 * 5
10
iex> 10 / 5
2.0

整数の除算や除算の余り(モジュロ)が必要な場合、Elixirにはこれを実現するための便利な関数が2つ用意されています。

iex> div(10, 3)
3
iex> rem(10, 3)
1

ブール演算

Elixirは ||&&! という論理演算子を用意しており、これらはどんな型にも対応しています:

iex> -20 || true
-20
iex> false || 42
42

iex> 42 && true
true
iex> 42 && nil
nil

iex> !42
false
iex> !false
true

Elixirでは、「真偽性」の概念は非常にシンプルです。falsenilだけが偽と見なされます。0""(空文字列)、[](空リスト)を含む他のすべての値は真と見なされます。この厳格なルールにより、||&&!などのブール演算子は、条件ロジックのために任意のデータ型で予測可能に動作します。

さらに、最初の引数が真理値(truefalse)で なければならない 3つの演算子があります:

iex> true and 42
42
iex> false or true
true
iex> not false
true
iex> 42 and true
** (BadBooleanError) expected a boolean on left-side of "and", got: 42
iex> not 42
** (ArgumentError) argument error

参考: Elixirの andor はErlangの andalsoorelse に対応しています。

比較

Elixirには私たちが慣れている全ての比較演算子が備わっています: ==, !=, ===, !==, <=, >=, < そして > です。

iex> 1 > 2
false
iex> 1 != 2
true
iex> 2 == 2
true
iex> 2 <= 3
true

整数と浮動小数を厳密に比べるには === を使います:

iex> 2 == 2.0
true
iex> 2 === 2.0
false

Elixirの重要な特徴はどんな2つの型でも比べられるということで、これは特にソートにおいて有用です。ソートされる順序を覚える必要はありませんが、順序を気にするのは重要なことです:

number < atom < reference < function < port < pid < tuple < map < list < bitstring

これは他の言語では見られないかもしれない、正当で興味深い比較を引き起こします:

iex> :hello > 999
true
iex> {:hello, :world} > [1, 2, 3]
false

文字列への式展開

Rubyを使っているなら、Elixirでの式展開は見覚えがあるでしょう:

iex> name = "Sean"
iex> "Hello #{name}"
"Hello Sean"

文字列の連結

文字列連結は <> 演算子を利用します:

iex> name = "Sean"
iex> "Hello " <> name
"Hello Sean"

まとめ

このレッスンでは、Elixirの基本的な構成要素を学びました。

まずElixirをインストールし、対話型シェルIExを起動して、簡単な式を評価し、即座に結果を確認しました。そこから、基本データ型を探索しました:整数(2進数、8進数、16進数形式を含む)、浮動小数点数、ブーリアン、アトム、文字列です。

また、算術、ブーリアン論理、比較演算子などの基本的な演算も扱いました。その過程で、Elixirが真偽性をどのように扱うか — falsenilだけが偽である — そして||&&andorの各演算子がその期待に応じてどのように異なる動作をするかを見ました。

最後に、テキストを扱うための2つの重要なツールである文字列補間と文字列結合を確認しました。

これらの概念は、日常的なElixir開発の基礎を形成しています。IExでこれらを実験し、例を変更してみて、言語がどのように振る舞うかを観察してください。これらの基礎をしっかり理解することで、次のトピックをはるかに容易に把握できるようになります。

間違いを報告したい、あるいはこのレッスンに貢献したい? このレッスンをGitHubで編集しよう!