一日一処: JavaScriptで最短の真偽値を表現
真偽値
多くの言語で取り入れられているtrue
/false
を用いて、真か偽を表現するもの。これを用いて、条件分岐などを簡単に表現できる。
最短の表現とは
プログラムは特に、文字数に厳しい場面がある。プログラム自体の文字数が多いということは、その分ファイルの容量が大きくなる可能性がある。特にJavaScriptをミニファイせずに公開すると、利用者のネットワーク環境に負担を強いることにも繋がりかねない。そんな中、短く書くことができれば、よりネットワークなどのパフォーマンスは上昇すると思えないだろうか。
真偽値を最短で
JavaScriptには、TruthyやFalsyなどの表現がある。これは、真っぽい値や偽っぽい値を表したもので、例えば、'bob'
のような文字列は真であり、''
のような空文字は偽である。この特性を利用すれば、真偽値の表現はもっと短くなる。
console.log(!0) // true
たったに文字で、真を表現することができた。これは、Falsyである0
を否定することで、その逆であるtrue
を表現することができる。逆に以下のように書けば、false
を表現できる。
console.log(!1) // false
たったに文字で、4文字から5文字を短縮できるとなると、プログラムの1行あたりの情報も短くまとまり、完結な処理がかける可能性がある。ただし、これは、十分に注意して扱う必要がある。
処理が行われているという事実
実際に、否定!
を行っているため、リテラル値であるtrue
/false
を用いたときより、負荷がかかっている。大げさに書いているが、実際は、0.5ms程度の差しか見られなかったことと、実際の実行環境では、致命的な問題になることはないので、この事実だけでも理解しておくと良いと思う。
処理 | 速度 |
---|---|
true /false
|
7.5ms |
!0 /!1
|
8.0ms |
私の環境下でそれぞれ同じ処理を100回実行したもののを複数回確認し、その概ねの平均をとったものだ。通常100回も行うことはないため、簡単な処理においては、使用しても問題ないと言える。ただ、世の中には、些細なものでも気に入らない人や適切なリテラルの値を用いたい人もいるため、プロジェクトによっては、利用は要注意だ。
Discussion