JavaScript / LESSON 04 / JS04

JavaScript:条件分岐(if / switch)

1学習の目的

2基礎解説

やりたいこと書き方意味
1つだけ判定if (条件) { }条件がtrueのときだけ実行
2つに分けるif () { } else { }どちらか一方だけ実行
3つ以上に分けるelse if上から順に、最初のtrueだけ
値で振り分けるswitch (値) { case … }決まった値との照合向き
✅ 覚えるべき重要ポイント
  1. 条件は ( ) で囲み、処理は { } で囲む。1行でも { } を省略しないのが安全(後から行を足したときのバグを防ぐ)。
  2. else if は上から順に評価され、最初に true になった1つだけ実行される。だから条件は厳しい順に書く
  3. switch の各 case には必ず break を書く。忘れると次の case まで続けて実行される(フォールスルー)。
  4. switch は === で比較する。case 1case "1"別物として扱われる。
  5. 0・""・null・undefined は偽なので、if (!name) だけで「未入力」を判定できる。if (name === "") より簡潔で、null にも対応できる。

現場使用例:送料無料の判定 if (total >= 5000)、会員ランクの振り分け、フォームの入力チェック if (!name)、APIの応答コード分岐 switch (status)

const score = 78;
let rank;

if (score >= 90) {
  rank = "S";
} else if (score >= 75) {
  rank = "A";
} else if (score >= 60) {
  rank = "B";
} else {
  rank = "C";
}

console.log(`${score}点 → ランク${rank}`);   // 78点 → ランクA

// 値で振り分けるなら switch
const status = 404;

switch (status) {
  case 200:
    console.log("成功");
    break;
  case 404:
    console.log("見つかりません");
    break;
  default:
    console.log("その他のエラー");
}

3基本ドリル(10問)

JS04-D01 age に 20 を入れ、18以上なら「成人です」と出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 成人です

ヒント

if (条件) { 処理 } の形。条件はカッコ、処理は波カッコで囲む。

模範解答
const age = 20;

if (age >= 18) {
  console.log("成人です");
}
解説

if文の最小形。カッコと波カッコはセットで、Pythonのようなインデントによるブロック指定ではない点が違い。

JS04-D02 switch の case で break を書き忘れるとどうなるか。
A. エラーになる B. 次のcaseの処理まで続けて実行される C. 何も実行されない D. defaultが実行される
選択★☆☆無料
期待される結果

解答 == B

ヒント

break は「そこで抜ける」という意味。

模範解答
B
解説

これをフォールスルーと呼ぶ。意図的に使うこともあるが、ほとんどは書き忘れによるバグ。case を書いたら break も書くと機械的に覚える。

JS04-D03 temp に 30 を入れ、25より大きければ「暑い」、そうでなければ「暑くない」と出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 暑い

ヒント

else { } を使う。else に条件は書かない。

模範解答
const temp = 30;

if (temp > 25) {
  console.log("暑い");
} else {
  console.log("暑くない");
}
解説

else は「残り全部」を受け止める。条件を書くとエラーになるので、条件付きで分けたいときは else if を使う。

JS04-D04 3分岐にするためのキーワードを補ってコードを完成させよ。 穴埋め★☆☆無料
コード
const n = -5;

if (n > 0) {
  console.log("正の数");
} ____ (n < 0) {
  console.log("負の数");
} else {
  console.log("ゼロ");
}
期待される結果

出力 == 負の数

ヒント

「そうでなければ、もし〜」を表す2語。

模範解答
else if
解説

else if は何個でも並べられる。最後の else は条件不要で、すべてに当てはまらなかった場合を受け持つ。

JS04-D05 score = 95 のとき if (score >= 60) { A } else if (score >= 90) { B } ではどちらが実行されるか。
A. A B. B C. 両方 D. どちらも実行されない
選択★☆☆無料
期待される結果

解答 == A

ヒント

else if は上から順に見て、最初にtrueになった1つだけ。

模範解答
A
解説

95は最初の「60以上」で止まる。条件は厳しい順に書くのが鉄則で、この順番ミスは実務でも起きる典型バグ。

JS04-D06 price に 4800 を入れ、5000円以上なら送料0円、未満なら600円として「送料:600円」の形式で出力せよ。 コーディング★★☆無料
期待される結果

出力 == 送料:600円

ヒント

let fee を用意して if/else で代入し、最後にまとめて出力する。

模範解答
const price = 4800;
let fee;

if (price >= 5000) {
  fee = 0;
} else {
  fee = 600;
}

console.log(`送料:${fee}円`);
解説

分岐で変数に入れて、最後にまとめて出力する形はconsole.logの重複を避けられて読みやすい。実務コードの定番パターン。

JS04-D07 switch で 404 の場合の処理を抜けるコードを完成させよ。 穴埋め★★☆無料
コード
const status = 404;

switch (status) {
  case 200:
    console.log("成功");
    break;
  case 404:
    console.log("見つかりません");
    ____;
  default:
    console.log("その他");
}
期待される結果

出力 == 見つかりません

ヒント

case の処理を終えて switch から抜けるキーワード。

模範解答
break
解説

これが無いと default まで実行され、「見つかりません」と「その他」の両方が出力されてしまう。

JS04-D08 switch (1) のとき case "1": は実行されるか。
A. 実行される B. 実行されない C. エラーになる D. 環境による
選択★★☆無料
期待される結果

解答 == B

ヒント

switch はどの比較演算子で照合するか。

模範解答
B
解説

switch は === で厳密に比較する。数値の1と文字列の"1"は別物。JS03で学んだ === の性質がここでも効いてくる。

JS04-D09 userName に空文字 "" を入れ、未入力なら「名前を入力してください」と出力せよ(! を使うこと)。 コーディング★★☆無料
期待される結果

出力 == 名前を入力してください

ヒント

空文字は偽なので、if (!userName) だけで判定できる。

模範解答
const userName = "";

if (!userName) {
  console.log("名前を入力してください");
}
解説

!userName は「userNameが偽なら」という意味。空文字・null・undefined のすべてを1つの条件で拾えるので、入力チェックで多用する。

JS04-D10 month に 4 を入れ、switch で 3・4・5 なら「春」、それ以外なら「春以外」と出力せよ(case をまとめて書くこと)。 コーディング★★☆無料
期待される結果

出力 == 春

ヒント

case 3: case 4: case 5: と続けて書くと、3つとも同じ処理になる。

模範解答
const month = 4;

switch (month) {
  case 3:
  case 4:
  case 5:
    console.log("春");
    break;
  default:
    console.log("春以外");
}
解説

case を並べると「または」の意味になる。break を書かない性質を意図的に利用した書き方で、これは正しい使い道。

4実践シナリオ(5問)

JS04-S01 【会員ランク判定】年間購入額 amount = 87000 から、10万円以上「ゴールド」/5万円以上「シルバー」/それ未満「ブロンズ」と判定し、「年間87,000円 → シルバー会員」の形式で出力せよ。 コーディング★★☆無料
期待される結果

出力 == 年間87,000円 → シルバー会員

ヒント

厳しい条件(10万以上)から先に書く。金額は toLocaleString() で3桁区切り。

模範解答
const amount = 87000;
let rank;

if (amount >= 100000) {
  rank = "ゴールド";
} else if (amount >= 50000) {
  rank = "シルバー";
} else {
  rank = "ブロンズ";
}

console.log(`年間${amount.toLocaleString()}円 → ${rank}会員`);
解説

ランク判定はEC・CRMで必ず出てくる処理。条件の順番を逆にすると全員ブロンズになる典型バグに注意。

JS04-S02 【入力チェック】userName = ""、password = "abc123" をチェックし、名前が空なら「名前を入力してください」/パスワードが8文字未満なら「パスワードは8文字以上にしてください」/両方問題なければ「登録できます」と、最初に見つかった1件だけ出力せよ。 コーディング★★☆無料
期待される結果

出力 == 名前を入力してください

ヒント

else if でつなぐと1件だけ出る。空文字の判定は !userName、文字数は .length。

模範解答
const userName = "";
const password = "abc123";

if (!userName) {
  console.log("名前を入力してください");
} else if (password.length < 8) {
  console.log("パスワードは8文字以上にしてください");
} else {
  console.log("登録できます");
}
解説

会員登録フォームのチェック処理そのもの。else if でつなぐと「最初のエラーだけ表示」、if を並べると「全エラー表示」になる。仕様に応じて使い分ける。

JS04-S03 【APIレスポンスの分岐】status = 403 のとき、switch で次のように出力せよ。
200→「成功しました」/400→「リクエストが不正です」/401・403→「アクセス権限がありません」/500→「サーバーエラーです」/その他→「不明なエラー(コード:403)」
「[403] アクセス権限がありません」の形式で1行出力すること。
コーディング★★☆無料
期待される結果

出力 == [403] アクセス権限がありません

ヒント

401 と 403 は case を並べてまとめる。メッセージを変数に入れてから最後に出力すると1行で済む。

模範解答
const status = 403;
let message;

switch (status) {
  case 200:
    message = "成功しました";
    break;
  case 400:
    message = "リクエストが不正です";
    break;
  case 401:
  case 403:
    message = "アクセス権限がありません";
    break;
  case 500:
    message = "サーバーエラーです";
    break;
  default:
    message = `不明なエラー(コード:${status})`;
}

console.log(`[${status}] ${message}`);
解説

値が決まっている多分岐は switch が読みやすい。if/else if で書くと status === 200、status === 400 …と毎回変数名を書く必要があり冗長になる。

JS04-S04 【割引計算】price = 12000、isMember = true、hasCoupon = false。会員なら10%引き(Math.round で整数化)、さらにクーポンがあれば500円引き、結果がマイナスなら0円とし、「支払額:10,800円」の形式で出力せよ。 コーディング★★★無料
期待される結果

出力 == 支払額:10,800円

ヒント

「会員割引」「クーポン」「マイナス補正」は互いに独立した条件。else if ではなく if を3つ並べて上から順に価格を更新していく。

模範解答
const price = 12000;
const isMember = true;
const hasCoupon = false;

let total = price;

if (isMember) {
  total = Math.round(total * 0.9);
}

if (hasCoupon) {
  total -= 500;
}

if (total < 0) {
  total = 0;
}

console.log(`支払額:${total.toLocaleString()}円`);
解説

else if と if の並列は意味が違うという最重要ポイント。「どれか1つ」なら else if、「全部それぞれ適用」なら if を並べる。ここを取り違えると割引が1つしか効かないバグになる。

JS04-S05 【うるう年判定】year = 2100 がうるう年かを判定して「2100年:平年」の形式で出力せよ。
ルール:4で割り切れる年はうるう年。ただし100で割り切れる年は平年。ただし400で割り切れる年はうるう年。
コーディング★★★無料
期待される結果

出力 == 2100年:平年

ヒント

「例外の例外」があるので、400 → 100 → 4 の順に判定する。JS03の % と === を使う。

模範解答
const year = 2100;
let isLeap;

if (year % 400 === 0) {
  isLeap = true;
} else if (year % 100 === 0) {
  isLeap = false;
} else if (year % 4 === 0) {
  isLeap = true;
} else {
  isLeap = false;
}

console.log(`${year}年:${isLeap ? "うるう年" : "平年"}`);
解説

条件の順番がすべてを決める教科書的な問題。4から先に書くと2100年が誤判定される。実際にこのバグを埋め込んだシステム障害は何度も起きている。

5仕上げ課題

JS04-FINAL 【宅配便の料金判定】以下の変数から配送料金を計算し、4行で出力するコードを書け。

const weight = 4.2; // kg
const size = 95; // 3辺合計cm
const area = "関西";
const isMember = true;


料金ルール:
① サイズ100cm以下 かつ 重量5kg以下 → 基本900円・区分「通常サイズ」。それ以外 → 基本1400円・区分「大型サイズ」
② 地域加算(switch で書くこと):関東 +0円/関西 +200円/その他 +500円
③ 会員なら最後に合計から10%引き(Math.round で整数化)

出力仕様(4行):
=== 配送料金 ===
区分:通常サイズ(95cm / 4.2kg)
地域加算:関西 +200円
請求額:990円(会員割引あり)
期待される結果

出力4行が完全一致

ヒント

①②③は独立した判定なので、if群を3つに分けて上から順に計算する。②は switch (area) で分岐し、加算額と表示を両方決める。最後の「会員割引あり/なし」は三項演算子で埋め込める。

模範解答
const weight = 4.2;
const size = 95;
const area = "関西";
const isMember = true;

// ① サイズ区分と基本料金
let base;
let kind;

if (size <= 100 && weight <= 5) {
  base = 900;
  kind = "通常サイズ";
} else {
  base = 1400;
  kind = "大型サイズ";
}

// ② 地域加算
let extra;

switch (area) {
  case "関東":
    extra = 0;
    break;
  case "関西":
    extra = 200;
    break;
  default:
    extra = 500;
}

// ③ 会員割引
let total = base + extra;

if (isMember) {
  total = Math.round(total * 0.9);
}

console.log("=== 配送料金 ===");
console.log(`区分:${kind}(${size}cm / ${weight}kg)`);
console.log(`地域加算:${area} +${extra}円`);
console.log(`請求額:${total.toLocaleString()}円(${isMember ? "会員割引あり" : "会員割引なし"})`);
解説

実務の料金計算はほぼこの構造で書かれている。条件の塊ごとに分岐を分け、変数を上から積み上げる——この設計ができていれば、後から「離島は+800円」「学割を追加」といった仕様変更が来ても壊れずに拡張できる。

①は範囲の比較なので if、②は決まった値との照合なので switch——同じ「分岐」でも道具を使い分けているのがこの課題のポイント。地域が10種類に増えても switch なら case を足すだけで済む。

次章では繰り返しを学ぶ。1件の配送料しか計算できなかったこのコードが、100件のデータを一度に処理できるようになる。