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