JavaScriptにおけるフラグの操作
これから、フラグの操作方法を学びます。
フラグとは、trueとfalseの
2つの値のみを取ることができる特殊な変数です。
フラグを使用すると、何かの不在を確認する
問題を解決できます:例えば、配列内に特定の値を持つ
要素がないことを確認することができます。
さあ、始めましょう。
次の問題を解決してみましょう:数値の配列が与えられ、
その中に値3を持つ要素が存在するか
どうかを確認する必要があります。存在する場合は
'+++'を出力し、存在しない場合は
'---'を出力します。
まず、'+++'を出力することを試みましょう。
そのために配列のすべての要素をループ処理し、
if文で現在の要素が値3に等しいかどうかを
確認します。等しい場合は'+++'を出力します:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
しかし、この解決策はあまり良くありません:
配列に値3が1つではなく複数ある場合、
'+++'が複数回出力されてしまいます。
配列を修正して(値3の要素を2つにして)、
これを確認してみましょう:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // 複数回出力される
}
}
問題を修正しましょう:要素が見つかったら
breakを使用してループを終了します:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // ループを終了する
}
}
次に、配列に値3の要素がまったく存在しない場合に、
'---'を出力するようにしてみましょう。
よくある誤りは、if文にelseを追加することです。
これでは、3ではないすべての要素に対して
'---'が出力されてしまいます:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // 要素3で出力される
} else {
console.log('---'); // 要素1, 2, 4, 5で出力される
}
}
つまり、elseを追加するという考えは、
うまく機能しない悪い考えです。この種の問題
(この種の問題は非常に頻繁に発生します)を解決するために、
いわゆるフラグが使用されます。
上記で述べたように、フラグとは、
trueまたはfalseの
2つの値のみを取ることができる変数です。
では、変数flagを作成し、次のような意味を持たせましょう:
この変数がtrueに等しい場合、配列には要素3が存在し、
falseの場合、そのような要素は存在しません。
最初に変数flagを値falseに設定します。
つまり、配列に要素3は存在しないと見なします:
let arr = [1, 2, 3, 4, 5];
let flag = false; // 配列に要素3はないと見なす
次に、以前と同じようにif文を使用してループを実行します。
ループが配列に要素3があることを検出した場合、
変数flagを値trueに設定し、
breakを使用してループを抜けます:
let arr = [1, 2, 3, 4, 5];
let flag = false; // 配列に要素3はないと見なす
for (let elem of arr) {
if (elem == 3) {
flag = true; // 要素が存在する - 変数flagを再定義する
break; // ループを抜ける
}
}
配列に3が存在するかどうかの質問への答えは、
ループの後にのみ与えることができます。
そして、その答えはすでに得られています:ループの後、
変数flagはfalseのままか、
またはループが配列内の3を検出した場合に
その値をtrueに変更している可能性があります:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// ここで変数flagはtrueまたはfalse
これで、ループの後にif文を使用して、
変数flagを確認し、画面に'+++'
または'---'を出力することができます:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
次の配列が与えられています:
let arr = ['a', 'b', 'c', 'd', 'e'];
この配列に要素'c'が含まれているか
確認してください。含まれている場合は
'+++'を出力し、含まれていない場合は
'---'を出力してください。
ある数が素数かどうかをチェックする コードを書いてください。 素数とは、1とそれ自身でのみ割り切れ、 他の数では割り切れない数のことです。