loading...
gumi TECH Blog

Elixir入門 03: 演算子の基本

gumitech profile image gumi TECH Updated on ・2 min read

本稿はElixir公式サイトの許諾を得て「Basic operators」の解説にもとづき、加筆補正を加えてElixirの基本的な演算子についてご説明します。

算術演算

四則演算はつぎのとおりです。演算子/による除算は結果が整数であっても、浮動小数点数に変わることにご注意ください。

iex> 4 + 2
6
iex> 4 - 2
2
iex> 4 * 2
8
iex> 4 / 2
2.0
iex> (1 + 2) / 3 + 4 * 5
21.0

整数の割り算で、商の整数部を得るにはdiv/2関数を用います。また、整数の剰余を求めるのはrem/2関数です。

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

リストの加減算

リストに別のリストの要素を加えるときは演算子++/2、差し引くには--/2を用います。

iex> list ++ ["Cherry"]
[3.14, :pie, true, "Apple", "Cherry"]
iex> ["π"] ++ list
["π", 3.14, :pie, true, "Apple"]
iex> list -- [true, false]
[3.14, :pie, "Apple"]

文字列の演算

文字列をつなぐ演算子は<>です。

iex> name = "alice"
iex> "hello " <> name
"hello alice"

アトムは#{}でかこんで文字列補間することにより、文字列に含めることができます。

iex> "hello #{:world}"
"hello world"

論理和と論理積および否定

論理和||と論理積&&の演算子は、左オペランド(被演算子)を論理値として評価します。Elixirではfalsenilを除く値はtrueと評価されます。それぞれの演算子が返す値はつぎのふたつの表001と002のとおりです。

表001■論理和||演算子

左オペランドの評価 返される値
true 左オペランドの値
false 右オペランドの値

表002■論理和&&演算子

左オペランドの評価 返される値
true 右オペランドの値
false 左オペランドの値
iex> -1 || true
-1
iex> false || 2
2
iex> nil && 3
nil
iex> true && 4
4

否定の演算子!は、オペランドを論理値として評価したうえで、反転した論理値が返されます。

iex> !true
false
iex> !1
false
iex> !nil
true

さらに、厳密な論理演算子orandおよびnotがあります。いずれも、はじめのオペランドは必ず論理値でなければなりません。

iex> is_atom(:example) and 1
1
iex> false or 1
1
iex> not is_number(false)
true
iex> 1 and true
** (BadBooleanError) expected a boolean on left-side of "and", got: 1
iex> not 1
** (ArgumentError) argument error
    :erlang.not(1)

論理和および論理積演算子が左オペランドを返す場合、右オペランドは実行されません。たとえば、実行されれば引数をエラーとして出力するraise/1関数が右オペランドに置かれたつぎのコードはエラーになりません。

iex> false and raise("実行されればエラー")
false
iex> true || raise("実行されればエラー")
true

比較

値の大小や等しいか等しくないかの比較をする演算子はつぎのとおりです。

  • ==: 等しい
  • !=: 等しくない
  • <=: 以下
  • >=: 以上
  • <: 小さい
  • >: 大きい
iex> 1 > 2
false
iex> 1 != 2
true
iex> 1 == 1
true
iex> 1 <= 2
true

さらに、厳密な等価===と不等価!==の演算子があります。

iex> 1 == 1.0
true
iex> 1 === 1.0
false

Elixirでは、異なった型のデータでも大小が比べられます。データのソートを考えたとき、型を心配しなくて済むためです。

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

データ型による大きさの順序はつぎのとおりです(「Term ordering」参照)。

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

Elixir入門もくじ

番外

Posted on by:

gumitech profile

gumi TECH

@gumitech

gumi TECH は、株式会社gumiのエンジニアによる技術記事公開やDrinkupイベントなどの技術者交流を行うアカウントです。 gumi TECH Blog: http://dev.to/gumi / gumi TECH Drinkup: http://gumitech.connpass.com

gumi TECH Blog

株式会社gumiのエンジニアによる技術記事を公開しています。

Discussion

pic
Editor guide