条件で処理や代入する値を分岐する方法について学びます。 ## Reference - [条件分岐 · JavaScript Primer \#jsprimer](https://jsprimer.net/basic/condition/) ## Lesson 条件分岐にはif文を使います。 ```js if (条件) { // 条件に一致した場合の処理 } ``` 条件に当てはまらない場合に処理を分けたい場合は、if-else文を使います。 ```js if (条件) { // 条件に一致した場合の処理 } else { // 条件に一致しなかった場合の処理 } ``` 場合によってはswitch文を使った方が分かりやすくなります。`break` を忘れないように注意しましょう。 ```js // 0, 1, 2, 3 のいずれかをランダムに生成 const r = Math.round(Math.random() * 3); switch (r) { case 0: console.log("zero"); break; case 1: console.log("one"); break; case 2: console.log("two"); break; case 3: console.log("three"); break; default: console.error(`Unexpected error ${r}`); } ``` 変数への代入を行う場合は[[三項演算子 (JavaScript)|三項演算子]]を使うと再代入が不要になります。 ```js const r = 条件 ? 条件を満たす場合 : 条件を満たさない場合 ``` ## Mission 1 #😁EASY 以下のコードを `else` を使わない実装にリファクタリングしてください。ただし、**[[三項演算子 (JavaScript)|三項演算子]]は使わない**でください。 ```js /** * 約50%の確率で0かnullを返す */ function selectZeroOrNull() { if (Math.random() > 0.5) { return 0; } else { return null; } } ``` %% 解答例 ```js /** * 約50%の確率で0かnullを返す */ function selectZeroOrNull() { if (Math.random() > 0.5) { return 0; } return null; } ``` %% ## Mission 2 #😁EASY [[#Mission 1]]で **リファクタリングしたコード** を **[[三項演算子 (JavaScript)|三項演算子]]を使った** 実装に変えてください。 %% 解答例 ```js /** * 約50%の確率で0かnullを返す */ function selectZeroOrNull() { return Math.random() > 0.5 ? 0 : null; } ``` %% ## Mission 3 #😁EASY 以下は[[#Mission 1]]や[[#Mission 2]]で実装した `selectZeroOrNull` 関数を利用したコードです。このコードが **間違っている理由** を説明してください。 ```js const r = selectZeroOrNull(); // 結果がnullの場合は例外を送出する if (!r) { throw Error("nullが発生しました!"); } // 結果がnullでなければ出力 console.log(`結果は ${r} でした`); ``` %% 解答例 `0` も `null` も [[Falsy (JavaScript)|Falsy]]であるため、if文の値は常に[[Truthy (JavaScript)|Truthy]]となり、常にブロック内の例外送出処理が実行されるから。 %% ## Mission 4 #😁EASY [[#Mission 3]]のコードを正しく修正してください。 %% 解答例 [[等価演算子 (JavaScript)|等価演算子]] ( `r == null` ) でもOK。 ```js const r = selectZeroOrNull(); // 結果がnullの場合は例外を送出する if (r === null) { throw Error("nullが発生しました!"); } // 結果がnullでなければ出力 console.log(`結果は ${r} でした`); ``` %% --- *NEXT* >> [[📗TDQ-010 Denoのテスト]]