2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptにおける条件分岐の最適化戦略:if, switch, オブジェクトリテラルによる選択制御

Posted at

概要

条件分岐はコード内で最も多く使われる制御構造だが、
乱用すると分岐がスパゲッティ化し、ロジックが不透明化する。

JavaScriptでは if-else, switch, 三項演算子, オブジェクトリテラル, 関数ディスパッチ など、
条件制御の手法が豊富にある。重要なのは、**分岐そのものより「分岐の責務と配置」**である。

本稿では、条件分岐の使い分け、分岐の抽象化、選択の最適戦略、設計判断の基準を整理して提示する。


1. 基本:if / else の役割

if (status === 'active') {
  activate();
} else if (status === 'disabled') {
  disable();
} else {
  fallback();
}
  • ✅ 2〜3条件までなら直感的で読みやすい
  • ❌ 条件が多くなるとネスト・重複・可読性の低下が発生

2. switch による明示的分岐

switch (type) {
  case 'circle':
    drawCircle(); break;
  case 'square':
    drawSquare(); break;
  default:
    drawUnknown(); break;
}
  • 同一キーに対する分岐では switch が効果的
  • ❌ コード量が増えやすく、式として扱えない(戻り値がない)

3. オブジェクトリテラルによるディスパッチ制御

const drawStrategies = {
  circle: () => drawCircle(),
  square: () => drawSquare(),
  default: () => drawUnknown()
};

const draw = (type) => (drawStrategies[type] || drawStrategies.default)();
  • ✅ 条件をデータとして扱える → マップベースの分離
  • ✅ 関数の切り替えが構造的・スケーラブルに記述可能

4. 関数型分離による選択制御

function draw(type) {
  const strategyMap = new Map([
    ['circle', drawCircle],
    ['square', drawSquare]
  ]);

  const fn = strategyMap.get(type) ?? drawUnknown;
  fn();
}
  • ✅ 関数を値として扱うことで、ロジックの切り替えを柔軟に管理
  • Map によってランタイム構築・条件追加が容易

5. 戦略的に選択する条件分岐構造

条件の数 状況 推奨構文
1〜3個 単純条件分岐 if / else
複数定数 同一キーに対する処理切り替え switch または オブジェクトリテラル
動的登録 ランタイムに関数を登録 Map + 関数ディスパッチ
スタイル/クラス切り替え UI構造の動的変更 オブジェクトリテラル or 条件式展開

設計判断フロー

① 条件の数は? → 多いならデータ構造で管理すべき

② 条件は静的か動的か? → 動的ならMapなどを活用

③ 条件に副作用が含まれるか? → 関数として分離

④ 処理が複雑になっていないか? → 戦略パターンの導入を検討

⑤ switch や if が肥大化していないか? → 構造を見直し

よくあるミスと対策

❌ if が10段以上続いて読解不能に

→ ✅ マップベースの制御に書き換える(オブジェクト or Map)


❌ switch 文で break を忘れて fall-through バグ発生

→ ✅ 各caseで必ずbreak or return する構造に


❌ UIのクラス切り替えで if を大量に書く

→ ✅ classNamesユーティリティやオブジェクト展開で解決


結語

条件分岐の最適化とは、**「どの構文を使うか」より「どう整理するか」である。
それは
“分岐の責任とスコープを設計し、スケーラブルかつ可読性の高い制御構造を実現するための戦略”**である。

  • 少ない分岐 → if / switch
  • 多い分岐 or 関数の切り替え → オブジェクト or Map
  • 分岐の意味を構造に持たせることで、責務が可視化される

JavaScriptにおける条件分岐最適化とは、
“条件の意図と責任を構造的に分離し、メンテナブルで明快な制御を構築する設計技術である。”

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?