2
2

More than 5 years have passed since last update.

ElixirのGETTING STARTED(3.Basic operators)をやってみた

Last updated at Posted at 2015-07-04

URL

試した環境

  • Ubuntu Server 14.04 LTS
  • Erlang/OTP 18
  • Elixir 1.0.4

Basic operators

文字列の連結:<>

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

短絡ブール演算子: and, or, not

引数がtrueやfalseでないと失敗する

iex(2)> true and true
true
iex(3)> false or true
true    
iex> not true
false
iex> false or is_atom(:example)
true
iex> 1 and true
** (ArgumentError) argument error: 1

短絡演算子なので、演算子の第一引数を評価した段階で式全体の値が定まらない場合のみ第二引数を評価する。
unknown_function()は、定義していないが、下記の初めの2つの例では、評価されないので失敗しない。

iex> false and unknown_function()                
false
iex> true or unknown_function()                 
true
iex> true and unknown_function()
** (RuntimeError) undefined function: unknown_function/0

ちなみにandとorは、Erlangのandalsoとorelse演算子と同じ。

論理演算子: ||, &&, !

どんな型でも引数として受け入れる。falseとnil以外はtrueとして評価される。

iex> 1 || true
1
iex> false || 11
11
iex> nil && 13
nil
iex> true && 17
17
iex> !true
false
iex> !1
false
iex> !nil
true
iex> !11 
false

使い分けの目安としては、引数がbooleanの場合は、and, or, notを使い、引数のどれかがnon-booleanの場合は、&&, ||, !を使う。

比較演算子:==, !=, ===, !==, <=, >=, <, >

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

比較するものがfloatの場合は、=====の違いに気をつける必要がある。===の方がより厳密に比較する。floatを扱っている場合は、注意が必要。

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

ちなみにErlangだと====:=(同一である), !=/=(等価ではない), !===/=(同一ではない)と対応する。
=====の使い方としては、飛行機本に従うなら大抵の場合は、===を使った方が良い。

実用主義的な理由で異なる型の比較もできる。

iex> 1 < :atom
true

比較の順番は次のように定義されている。
ソートするために、異なるデータ型を心配する必要はない。

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

上記の定義は、例えば、どんな大きさの数でもどんなatomよりは小さいということを意味している。

iex> 312312335345 < :a
true
iex> :a < is_atom(:a)
true
iex> :a > is_atom(:a)
false
iex(47)> :abc < {:a,:b}
true
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2