第4章 制御構造
if文
if文は与えられた条件式が真である場合に特定のコードブロックを実行します。
let age = 18;
if (age >= 20) {
console.log("成人です。");
}
このコードでは、ageが20以上の場合、"成人です。"というメッセージをコンソールに出力します。しかし、上記の例ではageが18なので、メッセージは出力されません。
else文
ifの条件式が真であればifのコードブロックを実行し、偽であればelseのコードブロックを実行します。
let age = 18;
if (age >= 20) {
console.log("成人です。");
} else {
console.log("未成年です。"); // 実行結果: 未成年です。
}
上記の例では、ageが20以上でないため、"未成年です。"というメッセージがコンソールに出力されます。
else if文
複数の条件を順に評価する場合には、else if文を使用します。最初の真の条件に一致するブロックのみが実行され、それ以降のブロックは評価されません。
let score = 75;
if (score >= 90) {
console.log("優秀です。");
} else if (score >= 80) {
console.log("良いです。");
} else if (score >= 70) {
console.log("可もなく不可もなく。"); // 実行結果: 可もなく不可もなく。
} else {
console.log("努力が必要です。");
}
上記の例では、scoreが70以上80未満なので、"可もなく不可もなく。"というメッセージがコンソールに出力されます。
switch文
switch文は、ある式の値や変数の値に基づいて、多岐分岐の制御を行います。caseラベルで指定された値とswitch内の式の値が一致する場合、そのcaseラベル以下のコードが実行されます。一致するcaseが見つからない場合、defaultラベルのコードが実行されます。
let day = 5; // 例として、5 = 金曜日とします。
switch(day) {
case 1:
console.log("月曜日");
break;
case 2:
console.log("火曜日");
break;
case 3:
console.log("水曜日");
break;
case 4:
console.log("木曜日");
break;
case 5:
console.log("金曜日"); // 実行結果: 金曜日
break;
case 6:
console.log("土曜日");
break;
case 7:
console.log("日曜日");
break;
default:
console.log("無効な数字");
}
この例では、変数dayの値が5なので、"金曜日"というメッセージがコンソールに出力されます。
breakについて
break文は、switch文内での次のcaseやdefaultラベルへの実行の移動を防ぎます。もしbreak文を忘れてしまうと、一致したcaseの次のcaseも実行されてしまうので注意が必要です。
defaultについて
defaultラベルは、どのcaseラベルも一致しない場合に実行されるコードを定義します。必須ではありませんが、想定外の値が来た場合の処理を書くために役立ちます。
switch文を使うことで、特定の値に基づく多岐分岐の処理を簡潔に記述することができます。
for文
for文は、指定した回数だけコードブロックを繰り返して実行するための制御構造です。一般的な形式は次のとおりです。
for ([初期化式]; [条件式]; [増減式]) {
// 実行するコード
}
初期化式:ループの最初に1回だけ実行される式。通常、カウンタ変数の初期値を設定します。
条件式:各反復の前に評価される式。この条件がtrueの間、ループは実行されます。
増減式:各反復の後に実行される式。通常、カウンタ変数の値を増減させるために使用されます。
例1: 1から5までの数字を出力
for (let i = 1; i <= 5; i++) {
console.log(i); // 1, 2, 3, 4, 5 の順に出力
}
このコードは、変数iを1から始めて、iが5以下の間、ループを実行します。ループの各反復の後で、iの値が1増加します。
例2: 5から1までの数字を逆順に出力
for (let i = 5; i >= 1; i--) {
console.log(i); // 5, 4, 3, 2, 1 の順に出力
}
このコードは、変数iを5から始めて、iが1以上の間、ループを実行します。ループの各反復の後で、iの値が1減少します。
for文は、特定の回数だけ繰り返し処理を行いたい場合に非常に便利です。
while文
while文は、指定された条件が真 (true) である限り、コードブロックを繰り返し実行します。基本的な形式は次のようになります。
while (条件式) {
// 実行するコード
}
条件式がtrueを返す間、while内のコードが反復して実行されます。
例1: 数値を2倍にして10以上になるまで繰り返し
let num = 1;
while (num < 10) {
console.log(num); // 繰り返しの都度、numの値を出力
num *= 2; // numを2倍にする
}
// 出力結果:
// 1
// 2
// 4
// 8
この例では、変数numの初期値が1で、その値が10未満の間、whileループが実行されます。ループの中で、numの値は2倍になります。
例2: 文字列の長さが10より小さい場合、文字を追加
let str = "Hello";
while (str.length < 10) {
console.log(str); // 繰り返しの都度、strの値を出力
str += "!"; // strの末尾に"!"を追加
}
// 出力結果:
// Hello
// Hello!
// Hello!!
// Hello!!!
// Hello!!!!
この例では、文字列strの長さが10文字未満の場合、whileループが実行され、各反復でstrに"!"が追加されます。
注意点: whileループの条件が常にtrueを返すようになると、ループは無限に実行されることになります。これを無限ループと呼び、プログラムが予期しない動作をする原因となります。ループの条件や内部のコードを慎重に設計することで、無限ループを回避することができます。
while文は、実行回数が事前に決まっていない繰り返し処理に特に適しています。
do-while文
do-while文は、コードブロックを最低1回は実行した後、指定された条件が真 (true) である限りコードブロックを繰り返し実行します。基本的な形式は以下の通りです。
do {
// 実行するコード
} while (条件式);
この構文の特徴は、条件がfalseであっても、do内のコードブロックが最初の1回は必ず実行される点です。
例1: ユーザー入力を求める繰り返し
この例では、仮定としてユーザーに何らかの入力を求める関数prompt()を使います。正しい入力が得られるまで繰り返し質問します。
let input;
do {
input = prompt("数字の10を入力してください"); // ユーザーに入力を促す
} while (input !== "10");
console.log("正しい入力を受け取りました");
このコードでは、ユーザーが"10"と入力するまで、入力を繰り返し求められます。
例2: 数値を増減させる繰り返し
let num = 5;
do {
console.log(num); // 繰り返しの都度、numの値を出力
num--;
} while (num > 0);
// 出力結果:
// 5
// 4
// 3
// 2
// 1
このコードでは、numが0より大きい間、do-whileループが繰り返されます。ループの中で、numの値は1ずつ減少していきます。
do-while文の主な利点は、条件が満たされる前にもコードブロックが実行される点にあります。したがって、少なくとも1回は処理を実行したい場合に役立ちます。
練習問題1.
入力された数が偶数か奇数かを判定するプログラムを作成してください。
// 以下にコードを記述
const num = prompt("数字を入力してください:");
// ここで偶数・奇数の判定を行う
練習問題2.
0から100までのスコアに基づいて、以下の評価を行うプログラムを作成してください。
90以上: A
80以上、90未満: B
70以上、80未満: C
60以上、70未満: D
60未満: F
// 以下にコードを記述
const score = prompt("スコアを入力してください:");
// ここで成績評価の判定を行う
練習問題3.
与えられた整数の配列について、偶数だけを合計して、その結果を表示するプログラムを作成してください。
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let sum = 0;
// ここで偶数のみを合計する
console.log(`偶数の合計は${sum}です。`);