IFとELSEを使わずに一行でTRUE/FALSEを表現する

今日ソースを直してて、
随分冗長なコードが幾つかあった。例えば、こんな感じ。

if 状態1 then
  Enable1 = true
  Enable2 = true
  Enable3 = true
  Enable4 = true
  .
  .
  .
  EnableN = true
else
  Enable1 = false
  Enable2 = false
  Enable3 = false
  Enable4 = false
  .
  .
  .
  EnableN = false
end if

というもの。ちょっと考えてこう書いてみた。

  Enable1 = (変数=状態1)
  Enable2 = (変数=状態1)
  Enable3 = (変数=状態1)
  Enable4 = (変数=状態1)
  .
  .
  .
  EnableN = (変数=状態1)

操作可能とか、表示・非表示などは、
大抵BOOLEAN値だからこの様に書けばコードが半分になる。
作っててふと思った。うんうん。これは使えそうだ。


状態がさらに増えた場合でも考えようによっては、
このテクが使えそうだ。例えば、

 '状態が1〜5あったとして
 Dim ebl as Boolean = (変数 = 状態1 OR 変数 = 状態2)
 Dim flg as Boolean = NOT(変数 = 状態3 OR 変数 = 状態4)
 .
 .
 'Enable2と3は状態1または2ならTRUE,それ以外はFalse
 Enable2 = ebl AND flg
 Enable3 = ebl AND flg

 'Enable4は状態5の時のみTRUEで、それ以外はFalse
 Enable4 = NOT ebl AND flg

すげ〜!なんか偶然『えいやっ』って書いたら、意外に使えそうだ。
これをIF文で書くと余計なコードが増えるわけだから、こっちの方がスッキリ。
ただこれ以上増えると読みにくくなるかもしれない。
条件が単純で、設定が大量にある場合なんか使えそうだ。

最後に

今日、NHKでオリンピックやってた。
女子バトミントンの・・なんでしたっけ日本人のコンビでカタカナ明記の方々*1
は残念ながら負けちゃいました。
けど・・相手を見る限り、勝てなさそう*2
その後の女子バレー。日本の対戦相手を見てビビッた。
『尻でけー!それもブルマだ!!*3
相手のお尻映像*4の後、パッと日本のベンチが映った。
・・・。
人種でこんなに違うんだ*5ねえ。
金メダルが難しいわけだ。

*1:こういう話題は疎いので分からない

*2:女子なのか?あれ。

*3:そして赤!さらに食い込み気味ときた!!

*4:ちょっと見ちゃった

*5:ろり〜だ