If-Else или Switch-Case: что выбрать?

Если вы новичок в программировании и JavaScript, вы можете запутаться в том, какие условные операторы использовать, особенно между операторами if-else и switch-case.

Когда я впервые узнал об условных операторах, я подумал, что это достаточно просто, и я могу использовать либо if-else, либо switch в любом случае. Но затем, когда я узнал больше об этой теме и попытался применить ее к некоторым задачам, я запутался в том, какой из них я должен использовать, в чем точная разница и как мне выбрать правильный.

Я изо всех сил пытался понять разницу и применение этих двух условных операторов и углубился в тему.

В этой статье я объясню эти две концепции и предоставлю сравнительную таблицу, чтобы вы поняли, как можно использовать if-else и switch-case в разных сценариях в зависимости от сложности.

Прежде чем перейти к деталям, давайте освежим в памяти, почему мы используем условные операторы в наших программах.

Как человеческие существа, мы все время принимаем различные решения, которые влияют на нашу жизнь. Например, если у нас есть немного свободного времени, мы должны решить, чем заняться: отдохнуть, посмотреть что-то, позвонить кому-нибудь или, может быть, заняться чем-то продуктивным.

Условные операторы позволяют нам принимать такие решения на основе условия в JavaScript. Если условие истинно, мы можем выполнить одно действие, иначе мы можем выполнить другое действие.

Таким образом, if-else и switch-case позволяют нам принимать эти решения на основе условия. Если вы хотите освежить свою память о том, как работает условное выражение, ознакомьтесь с этой статьей MDN.

Операторы if-else и else-if

Как новички, мы все любим операторы if-else! 😂

Оператор if-else принимает определенное условие и проверяет, является ли оно истинным или ложным. Если условие истинно, то оператор if выполняет определенный блок кода. Если условие ложно, то оператор else выполняет другой блок кода.

Давайте возьмем простой пример, чтобы понять, как это работает.

Сценарий 1

Представьте, что вы классный руководитель 5 класса, класса С. Вы должны проверять оценки учеников на основе их оценок, и вам нужно только проверить, сдал или не сдал ученик. Давайте проверим одну из оценок учащегося на основе его оценок с помощью оператора if-else.

function studentGrade(marks) {
  if (marks >= 50) {
    return "You have passed the exam! 🥳";
  } else {
    return "You have failed the exam!";
  }
}
console.log(studentGrade(75)); // "You have passed the exam! 🥳"

В соответствии с приведенным выше примером мы написали простую функцию, которая берет оценки учащихся и проверяет, выше ли они 50 или ниже 50. Если введенные оценки равны 50 или выше, выполняется блок if. Если меньше 50, то выполняется блок else.

Сценарий 2

Теперь представьте, что вы делаете еще один шаг и даете результат на основе конкретных оценок учащихся. Например, если учащийся получает «5+», он получает «Удалось! 🥳». Если студент получает «D», результатом будет «Failed 😢».

Чтобы иметь несколько таких вариантов, мы можем использовать операторы else-if, чтобы связать дополнительные варианты.

См. ниже код, написанный по второму сценарию с операторами else-if.

function studentFinalResultIf(grade) {
  if (grade === "A+") {
    return "Nailed It! 🥳";
  } else if (grade === "A") {
    return "Passed 💃";
  } else if (grade === "B+") {
    return "Passed 💃";
  } else if (grade === "B") {
    return "Passed 💃";
  } else if (grade === "C") {
    return "Barely Survived 😌";
  } else if (grade === "D") {
    return "Failed 😢";
  } else {
    return "Failed 😢";
  }
}
cconsole.log(studentFinalResultIf("A+"));   // "Nailed It! 🥳"

В соответствии с приведенной выше функцией мы используем различные условные операторы для предоставления результатов учащихся в зависимости от оценки. За исключением первого блока кода, который является блоком if, все остальные условия проверяются в блоках else if. И если ни одно из условий не выполняется, последний else выполняет свой кодовый блок.

Операторы переключения

Оператор switch является оператором выбора с множественным выбором. После того, как вы предоставили варианты и соответствующие выражения для каждого выбора, он просматривает варианты, пока не найдет вариант, соответствующий выражению, и не выполнит его.

Давайте перепишем второй сценарий, используя оператор switch.

function studentFinalResultSwitch(grade) {
  switch (grade) {
    case "A+":
      return "Nailed It! 🥳";
    case "A":
    case "B+":
    case "B":
      return "Passed 💃";
    case "C":
      return "Barely Survived 😌";
    case "D":
      return "Failed 😢";
    default:
      return "Failed 😢";
  }
}
console.log(studentFinalResultSwitch("A+"));   // "Nailed It! 🥳"

В приведенном выше примере у нас есть главное условие, которое имеет много вариантов. Когда мы проверяем конкретную оценку, он проверяет, какому выражению принадлежит оценка, а затем запускает этот блок case. В этом случае, когда оценка «A+», он выполняет case "A+": и возвращает результат «Удалось! 🥳'.

Теперь вы можете подумать, что и операторы if-else, и операторы switch очень похожи, и, возможно, операторы if-else кажутся более простыми в использовании. И у вас могут быть свои причины для выбора одного над другим. Итак, прежде чем делать какие-либо выводы, давайте проверим различия между операторами if-else и switch.

Сценарий третий

Что, если мы хотим распечатать оценки для всех учеников во всех классах? Представим, что у нас есть десять классов для 5 класса. И в каждом классе по 50 учеников. Таким образом, в целом мы должны проверить и распечатать результаты примерно для 500 студентов.

Если мы используем для этого оператор if-else, мы можем столкнуться с небольшой задержкой производительности. Это связано с тем, что во время выполнения оператор if-else всегда выполняет выражение, чтобы проверить, выполняется условие или нет. Работа будет идти медленнее, когда будет больше условий для проверки и когда выбор станет сложным.

С другой стороны, оператор switch работает сравнительно быстрее, потому что компилятор генерирует таблицу переходов для случаев переключения во время компиляции. Таким образом, когда код запускается, вместо проверки того, какие случаи удовлетворены, он только решает, какие случаи должны быть выполнены. В нашем третьем сценарии, чтобы создать отчеты для многих студентов, вариант переключения может быть лучшим подходом.

Я надеюсь, что теперь вы можете понять, что на основе приведенного выше сравнения и наших примеров оба оператора имеют свое место в коде, и вам решать, какой из них подходит для того или иного сценария. Нет правильного или неправильного способа сделать это.

Итак, как мы можем выбрать, какое утверждение использовать?

Выбор одного над другим не так прост. Вот несколько советов по выбору одного над другим;

Вы можете использовать if-else когда:

  • Результатом условия является boolean.
  • Условия сложные. Например, у вас есть условия с несколькими логическими операторами.

Таким образом, исходя из производительности, удобочитаемости, понятности, изменчивости, вам придется решить, использовать ли операторы if-else или операторы switch. Когда вы читаете больше кода и пишете больше кода, в конце концов вы начнете выяснять, какой из них подходит для какого сценария; это приходит с практикой.

Кроме того, есть и другие подходы, если вы хотите максимально избежать условных выражений, особенно в JavaScript; поиск в массиве или поиск объекта — это несколько распространенных подходов.

Заключительные мысли

Новичку может показаться запутанным решение, когда использовать какое выражение, но с большей практикой это становится лучше. Помните, что каждый случай требует определенного решения, но нет правильного или неправильного ответа. И вы сами выбираете подходящее решение, исходя из своего опыта. Поэтому я надеюсь, что приведенное здесь сравнение поможет вам определить разницу между операторами if-else и switch и не выбирать одну сторону.

Если единственный инструмент, который у вас есть, — это молоток, вы склонны рассматривать любую проблему как гвоздь — Абрахам Маслоу

Удачного кодирования!