【js】0 と 1 のカッコいい入れ替え方

こんばんは。
たかきです。

今日会社でコードレビューをしていたらこんなコードを見ました。

baa = baa === 0 ? 1 : 0;


「0 なら 1、 1 なら 0」に変換するコードですね。

三項演算子が苦手な方は以下のものと同じ処理をすると考えてください。

if(baa === 0) {
    baa = 1;
}
else {
    baa = 0;
}


あるいは、

switch(baa) {
  case 0:
    baa = 1;
    break;
  default:
    baa = 0;
    break;
}


こんな感じ?
この処理に switch を使ってる人がいたら注意しますけど。

で、はじめのコードを思い出してみると、

baa = baa === 0 ? 1 : 0;

こうでしたね。
もしも true を flase に、 false を true にするのならおそらくほとんどの人がこう書くでしょう。

baa = !baa;


boolean をトグルするときの定型文ですね。

しかし今回は boolean ぽいけど相手は 0 と 1。
(そもそも boolean を書けばいいように設計しとけよと思うでしょうけど、サーバーサイドのやんごとなき事情とかでこうしなきゃいけないシーンを考えます。)

なんかいい書き方ないかなぁ、やっぱ無理かなぁ、と逡巡したのち、わたくしは思いつきました。
イカスやつ。

baa = [1, 0][baa];


これだけ。
どーよ?
かっこよくね?
頭いいべ?
よく読んで。ちゃんと 0 と 1 入れ替わるでしょ?

一応解説しておくと、

[1, 0]


という配列の baa番目を baa に代入するんですね。

つまり
[1, 0][0] は 1、
[1, 0][1] は 0
ってことです。

真似していいですよ。


2020/04/30追記

この記事を書いたときは本気だったのですが、0と1を入れ替えるのなら、下記の一行でいいです。
大変申し訳ございませんでした。
恥ずかしいので、自分への戒めのため記事はこのまま残しておきます。

baa = +!baa;

 

カテゴリー: front-end, JavaScript, Work, エンジニア パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*