https://elixir-lang.org/getting-started/basic-operators.html
[[Elixir]]には2種類のboolean operatorがあるが、挙動は異なる。
| 種類 | アルファベット | 記号 |
| ------ | -------------- | ------------------------- |
| 真なら | `and` | `&&` |
| 偽なら | `or` | <code>||</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
```