In 'n' Out

知識を取り込み、そして発信する

真偽値

真偽値とは何か?

真偽値(Boolean)は、処理を実行するかどうかを判断するための値です。
JavaScriptでは、true(真)とfalse(偽)の2つだけを持ち、条件分岐や繰り返し処理の判断に使われています。
これまでfor文やif文を使ってきましたが、それらの処理も最終的には真偽値によって制御されていたことを見ていきましょう。

明示的に指定する

真偽値は、条件式の結果として自動的に生成されるだけでなく、trueやfalseを直接指定して変数に代入することもできます。

構文

変数 = true;
変数 = false;

これまで、trueは正しい、falseは正しくないと表現してきました。
しかし、真偽値を変数として用意することで、状態や判定結果を保持できます。

コード例

//boolean1.js
let state = true;

if(state){
    alert('trueです');
}else{
    alert('falseです');
}

動作例

※このボタンは動作確認用です

if文では、条件式の結果がtrueの場合のみブロック内の処理が実行されます。
この例では、stateがtrueなので、alertが実行されます。
if(state) は、内部的にはstateがtrueかどうかを判定しています。
また、let state; のように宣言だけすることはできますが、この場合の値はtrueでもfalseでもなく、undefinedになります。
真偽値として扱いたい場合は、必ずtrueかfalseを明示的に代入する必要があります。

for文やif文との関係

実は、これまで使用してきたfor文やif文も、処理が続くか終了するかを常にtrueかfalseで判断しています。

コード例

//for1.js
for(let i=0; i<3; i++){
    alert(i);
}

この繰り返し処理ではiが0から始まり、iに1ずつ足され、iが3になった時点で処理が終了します。
つまり、iが0~2の間はtrueなので、ブロック内の処理がされ、iが3になった時点でfalseとなったため、処理が終了しました。

//ifTest.js
let num = 10;

if(num > 5){
    alert('5より大きい数値です');
}

このif文も同様で、numが5を超えていればtrueなので、ブロック内の処理がされ、numが5未満の場合はfalseなので、処理がされません。

コード例

//ifElseIfElse.js
let score = 75;

if(score >= 80){
    alert('よく頑張りました');
}else if(score >= 60){
    alert('頑張りました');
}else{
    alert('もう少し頑張りましょう');
}

このif~else if~elseも同様で、scoreが80以上ならばtrue、80未満ならfalseで、falseだったら次のelse ifに進みます。 scoreが60以上ならばtrue、60未満ならばfalseで、falseだったら次のelseに進み処理が終了されます。

このようにtrueかfalseかについては触れてきませんでしたが、既にtrueとfalseの概念には触れていたのです。

トリガーとしての役割

真偽値は、処理を実行するためのトリガー(スイッチ)として使われることが多くあります。

コード例

//trigger1.js
let isActive = false;

if (!isActive) {
    for(let i=0; i<3; i++){
        alert('処理を実行します');
        if(i===2){
            isActive = true;
        }
    }
}

動作例

※このボタンは動作確認用です

このコードでは、真偽値をトリガーとして処理を開始しています。
isActiveは最初falseなので、!isActive の条件に合い処理が実行されます。
for文の中でiが2になったタイミングでisActiveをtrueに変更していますが、if文の条件は最初に判定されているため、処理内容自体は変わりません。
if文の条件はループの前に一度だけ評価されるため、途中でisActiveの値を変更しても、このif文の実行結果には影響しないためです。 このように、真偽値は処理の開始や状態を管理するフラグとして使われます。

コード例

//trigger2.js
let isExecuted = false;

for (let i = 0; i < 5; i++) {
    if (!isExecuted) {
        alert('最初の1回だけ実行されます');
        isExecuted = true;
    }
}

動作例

※このボタンは動作確認用です

このコードでは、真偽値を使って処理を一度だけ実行しています。
isExecutedがfalseの間だけ処理が実行され、実行後の1回目の処理でtrueに変更されます。
その結果、for文が繰り返されてもalertは1回しか表示されません。
このように真偽値は、処理の実行済み状態を管理するトリガーとして使えます。

最初のうちは値のみで何とかなりますが、複数条件が重なると複雑化していきます。
トリガーとして使われることは実際によくあることなので、値のみに固執せず柔軟に真偽値も使うようにしましょう。