JavaScript:条件分岐と繰り返し(書き方を固める)

投稿日:2026-01-13

音声

※ AI音声で読み上げます

目次

  1. if/elseの基本と読みやすい並べ方
  2. switchの使いどころ
  3. for / for...of / while の違い
  4. break/continueの使い方
  5. 早期returnでネストを浅くする
  6. 注意(ここだけ)
  7. 要約

if/elseの基本と読みやすい並べ方

条件分岐を読みやすく書き、ネストを減らすコツを使えるようになりましょう。

if/elseは条件が少ないときに直感的で使いやすいです。

複数条件は else if を使って上から順に判定しますが、深い入れ子(ネスト)は可読性を下げます。

早期return(ガード節)やフラットな条件チェーンを使うと読みやすくなります。

まずはCodePenで試せる小さな例を用意しています。

switchの使いどころ

switchは値が離散(具体的な定数)で分岐が多いときに向いています。caseごとに処理が分かれる場合に見通しがよくなりますが、fall-through(フォールスルー)は要チェックです。簡単なラベル付けや複数caseを同じ処理にまとめるときに有効です。

条件が式や範囲に依存する場合はif/elseの方が自然です。

for / for...of / while の違い

forはインデックスを使ったループに向いており、開始・終了・増分を明示できます。for...ofは配列や文字列などの反復可能オブジェクト(イテラブル)を要素単位で扱うのに適しています。whileは繰り返し回数が事前にわからない場合や、条件が外部で変わるケースに便利です。どれを使うかで読みやすさと意図の伝わりやすさが変わります。

break/continueの使い方

breakはループを完全に抜けるとき、continueはその反復をスキップして次に進むときに使います。

検索で最初に見つけた要素で終了する場合はbreak、特定の条件のときだけ処理を飛ばしたいときはcontinueを使うと、余分なネストを作らずに書けます。

switch内でのbreakはフォールスルー防止のためによく使われます。

早期returnでネストを浅くする

関数の冒頭で入力チェックや異常系を早めに返すと、残りの処理をインデントせずに書けて可読性が上がります。ガード節は「問題があるならすぐ返す」という考え方で、例外的な処理を先に片付けてから主処理を書くイメージです。これによりifの入れ子を避け、主要ロジックが左に揃って読みやすくなります。

最小コード:
貼り付け場所:CodePenの場合はHTML欄にHTML、JS欄に以下のJavaScriptを貼り付けてください。HTML欄にはボタンや出力用要素を用意しています。

<input id="num" type="number" placeholder="数値を入力" />
<button id="run">実行</button>
<pre id="out"></pre>
// ボタン要素(id="run")と、結果表示用の要素(id="out")を取得
const btn = document.getElementById('run');
const out = document.getElementById('out');

// 入力された文字(input)を受け取り、判定結果の文章を返す関数
function analyze(input) {
  // 入力が空、または数字として扱えないならメッセージを返して終了
  if (input === '' || isNaN(input)) return '入力が必要です';

  // 文字を数字に変換
  const n = Number(input);

  // ここに結果の文章を追加していく(\n は改行)
  let s = '';

  // n が正/負/ゼロ どれかを判定
  if (n > 0) s += 'positive\n';
  else if (n < 0) s += 'negative\n';
  else s += 'zero\n';

  // n を 3 で割った余り(n % 3)で分岐
  switch (n % 3) {
    case 0:
      s += 'mod 3 == 0\n'; // 3で割り切れる
      break;
    default:
      s += 'mod 3 != 0\n'; // 3で割り切れない
  }

  // i を 0 から増やしながら繰り返す(最大5回まで)
  // Math.min(n, 5) なので、n が大きくても 5 回で止まる
  for (let i = 0; i < Math.min(n, 5); i++) {
    // i が 2 のときだけスキップして次の回へ
    if (i === 2) continue;

    // バッククォート `...` を使うと、${i} のように変数を文字に混ぜられる
    s += `for i=${i}\n`;
  }

  // 配列(複数の値をまとめたもの)を用意
  const arr = [10, 20, 30];

  // 配列の中身を1つずつ取り出して文章に追加
  for (const v of arr) s += `of:${v}\n`;

  // 条件が true の間、繰り返す(ここでは 0 と 1 の2回)
  let i = 0;
  while (i < 2) {
    s += `while:${i}\n`;
    i++; // i を 1 増やす
  }

  // ここまで作った文章を返す
  return s;
}

// ボタンが押されたら実行する処理
btn.addEventListener('click', () => {
  // id="num" の入力欄の文字を取り出して analyze に渡す
  // 返ってきた文章を out に表示する
  out.textContent = analyze(document.getElementById('num').value);
});

実行方法:CodePenに貼って「Run」するか、上のHTMLをindex.html、JSを外部スクリプトでブラウザに読み込ませて開きます。ボタンをクリックすると処理が動きます。

確認方法:画面の入力欄に数値を入れて実行ボタンを押すと #out に結果が表示されます。Consoleでログを確認する場合は console.log に出力するよう一時変更して試せます。

よくあるミス:比較で == を使って型変換に頼ることがあります。原因は型の違いを意識しないことです。直し方は厳密等価演算子 === を使い、必要であれば Number() や String() で明示的に型変換することです。

使い分けの基準:インデックスや逆方向ループが必要なときは for、配列要素を順に処理するだけなら for...of を優先します。配列操作で新しい配列が欲しいときは map、条件で絞るなら filter を使うと宣言的で読みやすくなります。オブジェクトの固定キーでの分岐はオブジェクトマップ(辞書)で代替可能です。

注意(ここだけ)

  • if (x = 1) のような「代入」を条件に書くミスが起きがちです。比較は === を基本にします。

  • switchbreak を忘れるとフォールスルーします。意図がない限り必ず入れます。

  • ループの「回数・境界(< と <=)」はバグの温床です。配列は i < arr.length を基本にします。

要約

  1. if/else は少数分岐で直感的です。深いネストは早期returnで回避します。

  2. switch は離散値の多分岐で有効です。フォールスルーに気を配ります。

  3. for はインデックス管理に向きます。for...of は要素列の反復に向き、while は回数不定の繰り返しに向きます。

  4. break でループから脱出します。continue で現在の反復をスキップして可読性を保ちます。

  5. 早期return(ガード節)を使うとネストが浅くなり、主要ロジックが見やすくなります。