https://elixir-lang.org/getting-started/basic-operators.html [[Elixir]]には2種類のboolean operatorがあるが、挙動は異なる。 | 種類 | アルファベット | 記号 | | ------ | -------------- | ------------------------- | | 真なら | `and` | `&&` | | 偽なら | `or` | <code>&#124;&#124;</code> | | 否定 | `not` | `!` | ## かつ - `and`は演算子左側にbooleanのみを受け付けるが、`&&`はboolean以外も受け付ける - `&&`は演算子左側が[[Truthy (Elixir)|Truthy]]の場合のみ`true`となる ```elixir > true and :ok :ok > false and :ok false > 1 and :ok ** (BadBooleanError) expected a boolean on left-side of "and", got: 1 ``` ```elixir > true && :ok :ok > false && :ok false > 1 && :ok :ok > 0 && :ok :ok > "" && :ok :ok > nil && :ok nil ``` ## または - `or`は演算子左側にbooleanのみを受け付けるが、`&&`はboolean以外も受け付ける - `||`は演算子左側が[[Falsy (Elixir)|Falsy]]の場合のみ`true`となる ```elixir > true or :ng true > false or :ng :ng > 1 or :ng ** (BadBooleanError) expected a boolean on left-side of "or", got: 1 ``` ```elixir > true || :ng true > false || :ng :ng > 1 || :ng 1 > 0 || :ng 0 > "" || :ng "" > nil || :ng :ng ``` ## 否定 - `not`は演算子左側にbooleanのみを受け付けるが、`not`はboolean以外も受け付ける - `!`は`false`または`nil`以外`true`である - `!`は右側が[[Falsy (Elixir)|Falsy]]の場合のみ`true`となる ```elixir > not true false > not false true > not 1 ** (ArgumentError) argument error :erlang.not(1) ``` ```elixir > !true false > !false true > !1 false > !0 false > !"" false > !nil true ```