Dartで論理演算したい!
Dartの論理演算ではORとANDしかできず,XORとかは頑張るしか無いと思っていた時期が私にもありました.
でもJSとかと同じで && とか || は短絡評価されるから厳しくない??
しかしbool型の定義を見てみると…
https://gyazo.com/b10be7e30dae1dc50e2f19e847e4a647
なんとAND, ORに続きXORがあるではないですか!!
神GOD
ビット演算子と同じだからちょっとだけ紛らわしいけど,あくまでbool型の演算子だから型安全な書き方をしていれば大丈夫.
ちなみにこのissueコメントで気づきました.感謝します.
ちなみにそれどこで使うん?
コンポーネントとか作るとき,「2つのパラメータのうちどちらかは指定してほしい」ってときがあるじゃないですか.
ない?そう…
そういうまさに排他処理をしたいとき,こんな感じでassert文が書けるわけです.
code:dart
SomeWidget({
this.key,
this.hoge
this.huga,
}) : assert(
(hoge == null) ^ (huga == null),
'hogeかhugaどちらかを指定してください',
),
super(key: key);
各オペランドに括弧をつけないとbool扱いされない(そのままだとビット演算子と解釈される,ビット演算子は比較演算子より優先度が高いから)ので注意.つけなければ静的解析で怒られるのでわかりますが…