Elixir Language
operators
Zoeken…
De pijpexploitant
De pijpexploitant |>
neemt het resultaat van een uitdrukking aan de linkerkant en voert deze als de eerste parameter naar een functie aan de rechterkant.
expression |> function
Gebruik de Pipe Operator om expressies aan elkaar te koppelen en de stroom van een reeks functies visueel te documenteren.
Stel je de volgende situatie voor:
Oven.bake(Ingredients.Mix([:flour, :cocoa, :sugar, :milk, :eggs, :butter]), :temperature)
In het voorbeeld komt Oven.bake
voor Ingredients.mix
, maar wordt het als laatste uitgevoerd. Ook is het misschien niet duidelijk dat :temperature
een parameter is van Oven.bake
Dit voorbeeld herschrijven met behulp van de Pipe Operator:
[:flour, :cocoa, :sugar, :milk, :eggs, :butter]
|> Ingredients.mix
|> Oven.bake(:temperature)
geeft hetzelfde resultaat, maar de volgorde van uitvoering is duidelijker. Verder is het duidelijk dat :temperature
een parameter is voor de Oven.bake
oproep.
Merk op dat bij gebruik van de pijpexploitant de eerste parameter voor elke functie wordt verplaatst naar vóór de pijpexploitant, en dus lijkt de opgeroepen functie een parameter minder te hebben. Bijvoorbeeld:
Enum.each([1, 2, 3], &(&1+1)) # produces [2, 3, 4]
is hetzelfde als:
[1, 2, 3]
|> Enum.each(&(&1+1))
Pijpoperator en haakjes
Haakjes zijn nodig om dubbelzinnigheid te voorkomen:
foo 1 |> bar 2 |> baz 3
Moet worden geschreven als:
foo(1) |> bar(2) |> baz(3)
Booleaanse operatoren
Er zijn twee soorten booleaanse operatoren in Elixir:
- booleaanse operatoren (ze verwachten
true
offalse
als hun eerste argument)
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
Alle booleans-operators zullen ArgumentError
opwerpen als het eerste argument niet strikt Booleaanse waarde is, wat alleen true
of false
( nil
is niet Booleaans).
iex(1)> false and 1 # return false
iex(2)> false or 1 # return 1
iex(3)> nil and 1 # raise (ArgumentError) argument error: nil
- ontspannen booleaanse operatoren (werk met elk type, alles dat noch
false
nochnil
alstrue
wordt beschouwd)
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
Operator ||
zal altijd het eerste argument retourneren als het waar is (Elixir behandelt alles behalve nil
en false
om waar te zijn in vergelijkingen), anders zal het tweede argument terugkeren.
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
Operator &&
retourneert altijd het tweede argument als het waar is. Anders keren respectievelijk terug naar de argumenten, false
of 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
Zowel &&
als ||
zijn kortsluiting exploitanten. Ze voeren alleen de rechterkant uit als de linkerkant niet genoeg is om het resultaat te bepalen.
Operator !
retourneert Booleaanse waarde van ontkenning van huidige term:
iex(1)> !2 # return false
iex(2)> !false # return true
iex(3)> !"Test" # return false
iex(4)> !nil # return true
Eenvoudige manier om de Booleaanse waarde van de geselecteerde term te krijgen, is deze operator eenvoudig te verdubbelen:
iex(1)> !!true # return true
iex(2)> !!"Test" # return true
iex(3)> !!nil # return false
iex(4)> !!false # return false
Vergelijkingsoperatoren
Gelijkheid:
- waarde gelijkheid
x == y
(1 == 1.0 # true
) - waarde ongelijkheid
x == y
(1 != 1.0 # false
) - strikte gelijkheid
x === y
(1 === 1.0 # false
) - strikte ongelijkheid
x === y
(1 !== 1.0 # true
)
Vergelijking:
-
x > y
-
x >= y
-
x < y
-
x <= y
Als types compatibel zijn, maakt vergelijking gebruik van natuurlijke ordening. Anders is er een algemene regel voor het vergelijken van typen:
number < atom < reference < function < port < pid < tuple < map < list < binary
Word lid van operators
U kunt binaire bestanden (inclusief tekenreeksen) en lijsten samenvoegen (samengevoegd):
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'-operator
in
operator kunt u controleren of een lijst of bereik een item bevat:
iex(4)> 1 in [1, 2, 3, 4]
true
iex(5)> 0 in (1..5)
false