|
Чем заменить continue
Подскажите пожалуйста, чем заменить continue для такого кода:
continue - естественно так не работает. Есть ли в JS - аналог оператора goto, который бы так сработал ? function my_func(numm) { if(numm == 1) { continue jump; } console.log("check_1"); if(numm == 2) { continue jump; } console.log("check_2"); if(numm == 3) { continue jump; } console.log("check_3"); jump: console.log("jump"); } my_func(2); |
|
function my_func(numm){ jump: { if(numm == 1) break jump; console.log("check_1"); if(numm == 2) break jump; console.log("check_2"); if(numm == 3) break jump; console.log("check_3"); } console.log("jump"); } my_func(2); |
Спасибо!
|
Тока за такое руки отрывают и в любых нормальных конфигах оно запрещено.
|
Цитата:
|
Цитата:
А людям свойственно ошибаться. Или выдавать свое частное мнение за Истину. |
Это запрещено по той же причине что и goto - мозголомное запутывание кода. Очень мало людей назовут это ошибкой.
|
Много, чего можно назвать запутыванием кода.
Тот же break в цикле, разве не подобен goto? Тот же break в swinch - case разве не служит той же цели - пропустить что то и выйти из блока. От goto break отличается тем, что передает управление не куда угодно, а просто завершает выполнение блока, подобно, как if () return; завершает функцию. if () return не запрещен? А то ведь это тоже нарушает парадигму структурного программирования, согласно которой у функции (подпрограммы) должен быть один вход и один выход. |
Присoeдинюсь к дискуссии.
Лично меня тоже напрягает ограниченность break/continue. Почему нельзя указать число с указанием уровня вложенности для их действия? Примерно вот так: for(i = 0; i < x; ++ i) { for(j = 0; j < y; ++ j) { for(k = 0; k < z; ++ k) { if(k == i) continue 1; // continue 0 / continue - продолжение текущего блока (for k) // continue 1 - продолжение блока на 1 уровень выше (for j) // continue 2 - продолжение блока на 2 уровня выше (for i) switch(m[k]) { case false: break 2; // break - выйти из switch // break 0 - выйти из текущего цикла (for k) // break 1 - выйти из цикла на 1 уровень выше (for j) // break 2 - выйти из цикла на 2 уровня выше (for i) } } console.log("Покинули цикл for k"); if(i == j) break 2; // выходим из цикла двумя уровнями выше (for i) switch(m[j]) { case true: continue 1; // продолжение блока на 1 уровень выше (for i) } } console.log("Покинули цикл for j"); } |
Часовой пояс GMT +3, время: 21:59. |
|