bagerman
@bagerman

Взаимозаменяем ли switch с if в JavaScript?

Приветствую!
Взаимозаменяем ли switch с if-else в JavaScript?
Аргументируйте, пожалуйста, свой ответ.
Спасибо.
  • Вопрос задан
  • 1587 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Ситуация, в которой есть смысл сравнивать эти инструкции — проверка на соответствие множеству взаимоисключающих условий.

if else
Обрабатываются все условия методично, друг за другом.
switch
Каждый case — точка входа в блок инструкций.

Если сравнивать быстродействие, то webkit покажет почти одинаковые результаты, в Gecko производительность выше у switch, но не кардинально (на 20-30%), что не принципиально.

А вот логика у этих инструкций разная. Это заметно, если для некоторых значений требуется выполнить одни и те же инструкции. В этом случае написанные подряд case могут быть удобней, чем составная проверка в if. Кроме того, после выполнения входа выполнение инструкций продолжается либо до инструкции break, либо до окончания инструкции switch. И тут у switch появляются дополнительные возможности.

Следует также учесть, что в инструкции switch выполняется проверка с учётом типа (===), что отличает её от if, в которой проверяться может хоть приведённое значение (==), хоть чёрт в ступе. Значения case должны представлять собой примитивы (выражения, в результате выполнения которых подставляются примитивы).

Пример if
if (x === 'a') {
	//Только для 'a'
} else if (x === 'b' || x === 'c' || x === 'd') {
	//Только для 'b', 'c', 'd'
} else {
	//Для остальных
}

Пример switch
switch (x) {
	case 'a':
		//Только для 'a'
		break;
	case 'b':
	case 'c':
	case 'd':
		//Только для 'b', 'c', 'd'
		break;
	default:
		//Для остальных
}

А вот такое возможно только с использованием switch
switch (x) {
	case 'a':
		//Только для 'a'
	case 'b':
		//Только для 'a', 'b'
	case 'c':
	case 'd':
		//Только для 'a', 'b', 'c', 'd'
		break;
	default:
		//Для остальных
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@bromzh
Drugs-driven development
switch - это частный случай if-else (т.е. свитч можно на иф заменить, а обратно не всегда)
В питоне, например, свитча нет вообще, и отсутствие его не замечается.
Ответ написан
Если много элементов, то switch быстрее.
За аргументами в этот документ programming.sirrida.de/hashsuper.pdf
Ответ написан
Комментировать
Не всегда, для сложных условий switch не подходит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы