SWITCH

Множественные ветвления с использованием else...if считается плохой практикой и сейчас встречаются скорее в легаси-коде и не уместны для использования в текущей практике.

Как альтернативу применяют оператор switch, который принимает в качестве параметра входящее значение и в отдельных case проверяет соответствие. Если какой-то из кейсов совпал, значит код, указанный в нем должен выполниться. Чтобы не допустить исполнение следующего кейса по цепочке, необходимо указывать директиву break в конце каждого кейса. Для кода не учтенный значений в кейсах используется default, он всегда один и в конце конструкции switch, после всех case. Ему break не нужен, потому что и так последний и после него ничего быть не должно.

Рассмотрим пример использования множественного ветвления else...if:

А теперь, как то же самое может быть написано с помощью switch:

Это очень примитивный пример, отражающий скорее синтаксис и суть альтернативы, что за что отвечает в этих 2х принципах ветвления.

Хоть switch и лучший способ, но не самый оптимальный для такой простой проверки.

Для тех кто уже знаком с функциями, объектами и свойствами объектов, думаю станет понятен следующий код:

С точки зрения исполнения кода, гораздо легче хранить все условия, как свойства объекта, где ключем является значение проверяемого case, а значением, то, что этот case должен вернуть в результате совпадения.

Функция getIngredient в свою очередь вернет значение из объекта ingredients по полученному при вызове аргументу, что подставится как имя ключа.

Этим значением будет undefined, если в объекте ingredients не существует такого имени ключа, как получили через аргумент, а так как оператор || вернет правый truthy операнд, если левый falsy, то в таком случае результатом вызова функции станет 'lemon', в противном случае, если значение аргумента и имя ключа в объекте совпадут, то функция вернет значения свойства объекта с таким именем.

Это отличный рефакторинг, облегчающий чтение и поддержку кода в проекте.

Также можно улучшить выше описанный способ с использованием Map:

Удобство использования коллекции Map вместо обычного объекта заключается в возможности установления имени ключа не только типа данных string, но другие примитивы. Например, ключем может быть любое число (0, 1, ..., 100500), булевый true или false.

Last updated