Skip to content
Playground

3.条件分岐

学習目標

  • if / else if / else を使って条件に応じた処理を書ける
  • 条件分岐を使って最大値を求めるプログラムを読める

ここまでのプログラムは、上から下へ1行ずつ、すべての行が実行されていました。しかし実際のプログラムでは「条件に応じて異なる処理を行う」場面が頻繁にあります。

  • 年齢に応じて料金を変える
  • 点数に応じて成績をつける
  • ログイン中かどうかで表示を切り替える

このような「もし〜なら〜する」という処理を実現するのが 条件分岐 です。

条件に応じて処理を分けるには if を使います。if は条件式が true のときだけ、{} で囲まれた範囲(ブロック)を実行します。

if (条件式) {
条件式が true のときに実行する処理
}
conditionals.js
const age = 20;
if (age >= 18) {
console.log("成人です");
}
console.log("年齢: " + age);
成人です
年齢: 20

処理の流れを追います。

  1. () の中の age >= 18 を評価する。20 >= 18 なので true
  2. 条件式が true なので、{} の中の console.log("成人です") が実行される
  3. {} を抜けた後、console.log("年齢: " + age) が実行される

age15 に変えると、age >= 18false になり、ブロック内の処理は実行されません。

conditionals.js
const age = 15;
if (age >= 18) {
console.log("成人です");
}
console.log("年齢: " + age);
年齢: 15

条件が false のときにも別の処理を実行するには else を使います。

conditionals.js
const age = 15;
let label;
if (age >= 18) {
label = "成人";
} else {
label = "未成年";
}
console.log(label + "です(年齢: " + age + "");
未成年です(年齢: 15)

処理の流れを追います。

  1. age >= 18 を評価する。15 >= 18 なので false
  2. 条件式が false なので、if ブロックは実行されない
  3. else ブロックが実行され、label"未成年" が代入される
  4. if-else の後、console.loglabelage を連結して出力する

ブロックの中では変数の代入や計算など、複数の処理を書くことができます。

conditionals.js
const price = 1000;
const age = 15;
let total;
if (age >= 18) {
total = price;
console.log("通常料金");
} else {
total = price * 0.5;
console.log("子ども割引適用");
}
console.log("料金: " + total);
子ども割引適用
料金: 500

点数に応じて成績を A / B / C に振り分けるなど、分岐先が3つ以上あるときは else if を使います。

conditionals.js
const score = 75;
if (score >= 80) {
console.log("A");
} else if (score >= 60) {
console.log("B");
} else {
console.log("C");
}
B

条件は上から順に評価されます。最初に true になった条件のブロックだけが実行され、残りはすべて実行されません。score75 の場合、処理の流れを追います。

  1. score >= 80 を評価する。75 >= 80 なので false。このブロックは実行されない
  2. score >= 60 を評価する。75 >= 60 なので true"B" が出力される
  3. true が見つかったので、else ブロックは実行されない

score の値を 907540 などに変えて実行し、それぞれどのブロックが実行されるか確認してください。

条件分岐を使って、2つの数値から大きいほうを求めます。

conditionals.js
const a = 30;
const b = 45;
let max; // 大きいほうの値を入れるための変数
if (a > b) {
max = a;
} else {
max = b;
}
console.log(max);
45

処理の流れを追います。

  1. a > b を評価する。30 > 45 なので false
  2. if ブロックは実行されない
  3. else ブロックが実行され、maxb45)が代入される
  4. console.log(max)45 が出力される

ab が等しい場合は a > bfalse になるので else ブロックが実行されますが、値は同じなので結果に影響しません。

ab の値を変えて何パターンか試し、常に大きいほうが max に入ることを確認してください。