|
Чем заменить 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, время: 17:31. |
|