次の記事の続編です
この記事は、boolenの場合はandを使いましょうというアンチパターンが発端でした。
元記事の@zacky1972さんのコメントにandは、ガードの中に書けるというコメントをみて、まったく異なるものなんじゃないか?という疑問がでてきました。
andはbooleanの為のもので正統派。ガードにも使える。
じゃあ、&&は何なの!
||や!も同じですが、代表して&&と表記します。
&&にしかできないこと
&&は、nilかfalseを偽、それ以外を真と扱います。andにはこれはできません。
アンチパターンにも最初に書かれています。
Elixir provides the concept of truthiness: nil and false are considered "falsy" and all other values are "truthy".
偽になるのは、nilと:false。それ以外が真です。
&&を使う時はどんな時か?
- 値がbooleanの時はandを使うので、それ以外場合。
- booleanでなくて、:falseになることは、あまりなさそう。
つまり、
&&は、値がnilかどうかを調べたい時に使う。
ということになります。
例えば、nilだったら、デフォルト値にするみたいな記述
iex(12)> a = nil
nil
iex(13)> b = "abc"
"abc"
iex(14)> result = a || "default"
"default"
iex(15)> result = b || "default"
"abc"
iex(16)>
値がnilでない事を確認する
iex(16)> a = nil
nil
iex(17)> b = "abc"
"abc"
iex(18)> ! a
true
iex(19)> ! b
false
iex(20)>
二つの結果がnilだった時は、nilを返す
iex(20)> a = nil
nil
iex(21)> b = nil
nil
iex(22)> a && b
nil
iex(23)>
nilを使っていいのか?
勉強中