3.条件分岐
学習目標
if/else if/elseを使って条件に応じた処理を書ける- 条件分岐を使って最大値を求めるプログラムを読める
1. 条件分岐
Section titled “1. 条件分岐”ここまでのプログラムは、上から下へ1行ずつ、すべての行が実行されていました。しかし実際のプログラムでは「条件に応じて異なる処理を行う」場面が頻繁にあります。
- 年齢に応じて料金を変える
- 点数に応じて成績をつける
- ログイン中かどうかで表示を切り替える
このような「もし〜なら〜する」という処理を実現するのが 条件分岐 です。
1-1. if
Section titled “1-1. if”条件に応じて処理を分けるには if を使います。if は条件式が true のときだけ、{} で囲まれた範囲(ブロック)を実行します。
if (条件式) { 条件式が true のときに実行する処理}const age = 20;
if (age >= 18) { console.log("成人です");}
console.log("年齢: " + age);成人です年齢: 20処理の流れを追います。
()の中のage >= 18を評価する。20 >= 18なのでtrue- 条件式が
trueなので、{}の中のconsole.log("成人です")が実行される {}を抜けた後、console.log("年齢: " + age)が実行される
age を 15 に変えると、age >= 18 は false になり、ブロック内の処理は実行されません。
const age = 15;
if (age >= 18) { console.log("成人です");}
console.log("年齢: " + age);年齢: 151-2. if-else
Section titled “1-2. if-else”条件が false のときにも別の処理を実行するには else を使います。
const age = 15;let label;
if (age >= 18) { label = "成人";} else { label = "未成年";}
console.log(label + "です(年齢: " + age + ")");未成年です(年齢: 15)処理の流れを追います。
age >= 18を評価する。15 >= 18なのでfalse- 条件式が
falseなので、ifブロックは実行されない elseブロックが実行され、labelに"未成年"が代入されるif-elseの後、console.logでlabelとageを連結して出力する
ブロックの中では変数の代入や計算など、複数の処理を書くことができます。
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);子ども割引適用料金: 5001-3. else if
Section titled “1-3. else if”点数に応じて成績を A / B / C に振り分けるなど、分岐先が3つ以上あるときは else if を使います。
const score = 75;
if (score >= 80) { console.log("A");} else if (score >= 60) { console.log("B");} else { console.log("C");}B条件は上から順に評価されます。最初に true になった条件のブロックだけが実行され、残りはすべて実行されません。score が 75 の場合、処理の流れを追います。
score >= 80を評価する。75 >= 80なのでfalse。このブロックは実行されないscore >= 60を評価する。75 >= 60なのでtrue。"B"が出力されるtrueが見つかったので、elseブロックは実行されない
score の値を 90、75、40 などに変えて実行し、それぞれどのブロックが実行されるか確認してください。
1-4. 最大値の判定
Section titled “1-4. 最大値の判定”条件分岐を使って、2つの数値から大きいほうを求めます。
const a = 30;const b = 45;let max; // 大きいほうの値を入れるための変数
if (a > b) { max = a;} else { max = b;}
console.log(max);45処理の流れを追います。
a > bを評価する。30 > 45なのでfalseifブロックは実行されないelseブロックが実行され、maxにb(45)が代入されるconsole.log(max)で45が出力される
a と b が等しい場合は a > b が false になるので else ブロックが実行されますが、値は同じなので結果に影響しません。
a と b の値を変えて何パターンか試し、常に大きいほうが max に入ることを確認してください。