if-else, else ifは条件の網羅性を扱うときに使う。switchは値の網羅性を扱うときに使う。

値の網羅性を扱うというのは、単一の値が取りうる状態を列挙することを指す。

例えばユーザタイプによって処理を変えたい時は、switchを使うといい。

switch (UserType) {
  case(Regular):
    // 通常ユーザの処理
  case(Admin):
    // 管理ユーザの処理
  default:
    // それ以外の処理
}

条件の網羅性というのは、複数の値の組み合わせで変わる条件を列挙することを指す。

例えばユーザタイプに加えて、扱う言語によって処理が変わる場合は、else-ifを使うといい。

if (UserType === 'Admin' && language === 'ja') {
  // 管理ユーザかつ言語が日本語の場合の処理
} else if (UserType === 'Admin' && language === 'en') {
  // 管理ユーザかつ言語が英語の場合の処理
} else {
  // それ以外の処理
}
 

条件が2パターンしかない場合はif/elseを使うといい。

if (pressKey === 'a') {
  // aが押された時の処理
} else {
  // それ以外の処理
}

この場合、ifを2回でも同じことが書けるが、条件が網羅されているかどうかを表現したいならif-elseを使うべき。

// 上の例と同じだが、条件を網羅しているのかが直感的に分かりづらい。
 
if (alphabet === 'a') {
}
 
if (alphabet !== 'a') {
}

1つのブロックで1つの条件を扱った方がわかりやすい。

値や条件を網羅したいのではなく、特殊なパターンのときだけ処理したいという場合はifを使う。いわゆるアーリーリターン。

if (err) {
  // エラーがある場合の処理
}
 
if (!user) {
  // ユーザが存在しない場合の処理
}
 
// 本処理