Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Чем заменить continue (https://javascript.ru/forum/misc/84413-chem-zamenit-continue.html)

Andy_kun 02.09.2022 11:32

Чем заменить 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);

Vlasenko Fedor 02.09.2022 12:13

https://developer.mozilla.org/ru/doc...atements/label

voraa 02.09.2022 12:32

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);

Andy_kun 02.09.2022 12:44

Спасибо!

Aetae 02.09.2022 13:47

Тока за такое руки отрывают и в любых нормальных конфигах оно запрещено.

Andy_kun 02.09.2022 14:04

Цитата:

Сообщение от Aetae (Сообщение 547723)
Тока за такое руки отрывают и в любых нормальных конфигах оно запрещено.

Спасибо за предупреждение, я для себя :)

voraa 02.09.2022 17:22

Цитата:

Сообщение от Aetae
в любых нормальных конфигах оно запрещено.

Конфиги не боги делают.
А людям свойственно ошибаться.
Или выдавать свое частное мнение за Истину.

Aetae 02.09.2022 20:40

Это запрещено по той же причине что и goto - мозголомное запутывание кода. Очень мало людей назовут это ошибкой.

voraa 02.09.2022 21:28

Много, чего можно назвать запутыванием кода.
Тот же break в цикле, разве не подобен goto?
Тот же break в swinch - case разве не служит той же цели - пропустить что то и выйти из блока.

От goto break отличается тем, что передает управление не куда угодно, а просто завершает выполнение блока, подобно, как if () return; завершает функцию.
if () return не запрещен? А то ведь это тоже нарушает парадигму структурного программирования, согласно которой у функции (подпрограммы) должен быть один вход и один выход.

Alikberov 02.09.2022 23:17

Прис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.