3 基本的な演算子 - Basic operators

前の章で,Elixirで算術演算子として+-*/を使えるのを見ました.整数の商と余りを求めるのにdiv/2rem/2があることも知りました.

In the previous chapter, we saw Elixir provides +, -, *, / as arithmetic operators, plus the functions div/2 and rem/2 for integer division and remainder.

Elixirはリストを操作するのに++--という演算子も提供しています:

Elixir also provides ++ and -- to manipulate lists:

iex> [1,2,3] ++ [4,5,6]
[1,2,3,4,5,6]
iex> [1,2,3] -- [2]
[1,3]

文字列の結合は<>で行なえます:

String concatenation is done with <>:

iex> "foo" <> "bar"
"foobar"

Elixirには3つの論理演算子orandnotがあります.これらの演算子は第一引数が真理値(truefalse)であることを求めています:

Elixir also provides three boolean operators: or, and and not. These operators are strict in the sense that they expect a boolean (true or false) as their first argument:

iex> true and true
true
iex> false or is_atom(:example)
true

真理値でない場合は例外を発生させます:

Providing a non-boolean will raise an exception:

iex> 1 and true
** (ArgumentError) argument error

orandは短絡演算子です.左側が条件を満たさなかった場合にのみ右側が実行されます:

or and and are short-circuit operators. They only execute the right side if the left side is not enough to determine the result:

iex> false and error("This error will never be raised")
false

iex> true or error("This error will never be raised")
true

メモ: Erlang開発者の方へ,Elixirのandorは,Erlangのandalsoorelseとまったく同じです.

Note: If you are an Erlang developer, and and or in Elixir actually map to the andalso and orelse operators in Erlang.

これらの論理演算子と違い||&&!はどんな型でも受けつけます.この場合falsenil以外はtrueとして評価されます:

Besides these boolean operators, Elixir also provides ||, && and ! which accept arguments of any type. For these operators, all values except false and nil will evaluate to true:

# or
iex> 1 || true
1
iex> false || 11
11

# and
iex> nil && 13
nil
iex> true && 17
17

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

まとめると,真理値を期待している場合はandornotを使います.真理値でない引数がきてよい場合は&&||!を使います.

As a rule of thumb, use and, or and not when you are expecting booleans. If any of the arguments are non-boolean, use &&, || and !.

Elixirは比較演算子として==!====!==<=>=<>を提供しています:

Elixir also provides ==, !=, ===, !==, <=, >=, < and > as comparison operators:

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

=====の違いは後者の方が整数と浮動小数点数の比較に厳密である点です:

The difference between == and === is that the latter is more strict when comparing integers and floats:

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

Elixirでは異なる型を比較することもできます:

In Elixir, we can compare two different data types:

iex> 1 < :atom
true

便利にするために異なる型を比較できるようになっています.こうすると並べ替えアルゴリズムで異なる型同士の順序付けについて心配する必要がありません.全体の並べ替え順序は以下のように定義されています:

The reason we can compare different data types is pragmatism. Sorting algorithms don't need to worry about different data types in order to sort. The overall sorting order is defined below:

number < atom < reference < functions < port < pid < tuple < maps < list < bitstring

正確にこの順番を覚えておく必要はありませんが,こういった順番があることを知っておくことは大事です.

You don't actually need to memorize this ordering, but it is important just to know an order exists.

導入としてはこのくらいにしておきます.次の章では基本的な関数,型の変換やちょっとしたフロー制御について話しましょう.

Well, that is it for the introduction. In the next chapter, we are going to discuss some basic functions, data type conversions and a bit of control-flow.