07.12.2019, 13:59
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Ретурн в свиче можно?
Здравствуйте!
Можно ли использовать return внутри switch ?
Вот есть такая функция:
function test(id) {
let k;
switch (id) {
case 'in_1': k = [1, 2, 3, 4]; break;
case 'in_2': k = [1, 5, 3, 1]; break;
case 'in_3': k = [7, 4, 1, 3]; break;
}
return k;
}
Можно ли эту функцию написать вот так:
function test(id) {
switch (id) {
case 'in_1': return [20,180, 200,160]; break;
case 'in_2': return [110,20, 20,180]; break;
case 'in_3': return [110,20, 200,160]; break;
}
}
Нужны ли в таком случае операторы break ? Код вроде как работает. Но тут подсветка редактора VSCode делает все бреки полупрозначными (типа как ненужное) и пишет подсказку на бреках: Обнаружен недостижимый код.
Как лучше и правильней?
|
|
07.12.2019, 14:07
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
Недосмотрел, это подсказка в редакторе для ts, a я пишу на js.
|
|
07.12.2019, 14:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Switch будет прерван, так что break можно опустить, но первое более ожидаемое по смыслу.
|
|
07.12.2019, 14:14
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
laimas,
то есть лучше делать через переменную и первый вариант более приемлим?
|
|
07.12.2019, 14:17
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от MC-XOBAHCK
|
то есть лучше делать через переменную
|
А напишите длинный switch (хотя это уже плохо) с приличными выражениями. Сама конструкция его предполагает если...брейк, а такая каша с прерываниями или все в куче... Уж тогда из объекта выбирать и возвращать без switch.
|
|
07.12.2019, 14:23
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
laimas,
Спасибо за подсказку! Я понял - идём по класике с первым вариантом.
|
|
07.12.2019, 14:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
MC-XOBAHCK,
function test(id) {
return {
'in_1': [1, 2, 3, 4],
'in_2': [1, 5, 3, 1],
'in_3': [7, 4, 1, 3]
}[id]
}
|
|
07.12.2019, 19:34
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
Не слушай маразматиков, они те ещё скажут, что больше одного return на функцию нельзя.
Конструкции вида
function test(id) {
switch (id) {
case 'in_1':
return [20,180, 200,160];
case 'in_2':
return [110,20, 20,180];
case 'in_3':
return [110,20, 200,160];
}
}
абсолютно валидны, легко читаемы, высокопроизводительны и удобны.
Единственное, на что стоит обращать внимаете - здравый смысл: например мешать return и break действительно нежелательно, чтоб не запутаться; также если не предполагается никаких вычислений или вызовов - то лучше использовать константный объект с набором значений и просто брать их по ключу. (только не так, как написал рони, у него объект целиком заново создаётся каждый вызов)
__________________
29375, 35
|
|
07.12.2019, 20:10
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Aetae
|
они те ещё скажут, что больше одного return на функцию нельзя
|
А кто-то говорил? Да ну нафиг, что за мазохизм свитчером описывать массивы и возвращать, по свойству в объекте в данном случае более логично.
|
|
07.12.2019, 20:14
|
|
Профессор
|
|
Регистрация: 06.08.2017
Сообщений: 473
|
|
рони,
Прикольно, но я этот код понял только после того как ниже Aetae прокомментировал что это объект. Теперь вижу и понимаю что к чему. Спасибо за пример!
Aetae,
Спасибо вам за пояснение. Я свичёвые конструкции в коде люблю - с ними удобно. Но мне ни кто не говорил что больше одного return на функцию нельзя. Это я сам решил спросить у более опытных людей не будет ли ошибкой если я так ретурны расставлю.
|
|
|
|