Elixir Language
演算子
サーチ…
パイプオペレータ
Pipe Operator |>
は左辺の式の結果を受け取り、最初のパラメータとして右辺の関数に送ります。
expression |> function
式を連鎖させ、一連の関数のフローを視覚的に文書化するには、パイプ演算子を使用します。
次の点を考慮してください。
Oven.bake(Ingredients.Mix([:flour, :cocoa, :sugar, :milk, :eggs, :butter]), :temperature)
この例では、 Oven.bake
はIngredients.mix
前にありますが、最後に実行されます。また、それは明らかではないかもしれません:temperature
はOven.bake
パラメータです
パイプ演算子を使用してこの例を書き直す:
[:flour, :cocoa, :sugar, :milk, :eggs, :butter]
|> Ingredients.mix
|> Oven.bake(:temperature)
同じ結果が得られますが、実行順序が明確になります。さらに、 :temperature
がOven.bake
コールのパラメータであることは明らかです。
パイプ演算子を使用する場合、各関数の最初のパラメータはパイプ演算子の前に再配置されるため、呼び出される関数のパラメータは1つ少なくなります。例えば:
Enum.each([1, 2, 3], &(&1+1)) # produces [2, 3, 4]
次のものと同じです:
[1, 2, 3]
|> Enum.each(&(&1+1))
パイプ演算子とかっこ
あいまいさを避けるためにはかっこが必要です。
foo 1 |> bar 2 |> baz 3
次のように記述する必要があります。
foo(1) |> bar(2) |> baz(3)
ブール演算子
エリクシールには2種類のブール演算子があります:
- ブール演算子(最初の引数として
true
またはfalse
いずれかが必要true
)
x or y # true if x is true, otherwise y
x and y # false if x is false, otherwise y
not x # false if x is true, otherwise true
すべてのブール演算子は、最初の引数が厳密にブール値ではなく、 true
またはfalse
( nil
はブール値ではない)のみを意味する場合、 ArgumentError
させます。
iex(1)> false and 1 # return false
iex(2)> false or 1 # return 1
iex(3)> nil and 1 # raise (ArgumentError) argument error: nil
- リラックスブール演算子(任意の型で動作し、
false
でもなくてもnil
でないものはすべてtrue
とみなされtrue
)
x || y # x if x is true, otherwise y
x && y # y if x is true, otherwise false
!x # false if x is true, otherwise true
オペレーター||
真実であれば最初の引数を常に返します(Elixirはnil
とfalse
を除くすべてを比較で真とみなします)。そうでなければ2番目の引数を返します。
iex(1)> 1 || 3 # return 1, because 1 is truthy
iex(2)> false || 3 # return 3
iex(3)> 3 || false # return 3
iex(4)> false || nil # return nil
iex(5)> nil || false # return false
演算子&&
は真実なら常に第2引数を返します。それ以外の場合は、それぞれ引数false
またはnil
戻ります。
iex(1)> 1 && 3 # return 3, first argument is truthy
iex(2)> false && 3 # return false
iex(3)> 3 && false # return false
iex(4)> 3 && nil # return nil
iex(5)> false && nil # return false
iex(6)> nil && false # return nil
&&
と||
両方短絡オペレータです。左側が結果を決定するのに十分でない場合にのみ、右側を実行します。
オペレーター!
現在の用語の否定のブール値を返します:
iex(1)> !2 # return false
iex(2)> !false # return true
iex(3)> !"Test" # return false
iex(4)> !nil # return true
選択された項のブール値を得る簡単な方法は、単にこの演算子を2倍にすることです。
iex(1)> !!true # return true
iex(2)> !!"Test" # return true
iex(3)> !!nil # return false
iex(4)> !!false # return false
比較演算子
平等:
- 値の等しい
x == y
(1 == 1.0 # true
) - 値の不等式
x == y
(1 != 1.0 # false
) - 厳密な等式
x === y
(1 === 1.0 # false
) - 厳密な不等式
x === y
(1 !== 1.0 # true
)
比較:
-
x > y
-
x >= y
-
x < y
-
x <= y
型の互換性がある場合、比較では自然順序付けが使用されます。それ以外の場合は、一般的な型の比較ルールがあります。
number < atom < reference < function < port < pid < tuple < map < list < binary
結合演算子
バイナリ(文字列を含む)とリストを結合(連結)することができます:
iex(1)> [1, 2, 3] ++ [4, 5]
[1, 2, 3, 4, 5]
iex(2)> [1, 2, 3, 4, 5] -- [1, 3]
[2, 4, 5]
iex(3)> "qwe" <> "rty"
"qwerty"
'In'演算子
in
演算子を使用すると、リストまたは範囲にアイテムが含まれているかどうかを確認できます。
iex(4)> 1 in [1, 2, 3, 4]
true
iex(5)> 0 in (1..5)
false