Задать вопрос

Выход из условия if

Здравствуйте!

Имеется условие в условии:
if( ... ){
if( .. ){
} else {
 // здесь нужно выйти из условия
}
}


Поможет только goto?
Спасибо.
  • Вопрос задан
  • 67122 просмотра
Подписаться 15 Оценить 1 комментарий
Решения вопроса 3
begemot_sun
@begemot_sun
Программист в душе.
А что так все goto не любят ?
GOTO это такой же инструмент как и все остальные конструкции, грамотное его применение позволит сократить код и улучшить понятливость.
Ответ написан
Можно обернуть весь код в while (false) и пользоваться break:
while (false) {
    if (...) {
        if (...) {
            // ...
        } else {
            break; // == goto(#2)
        }
    }
}
// #2
Ответ написан
@klirichek
Оборачиваем в любой цикл. Перед закрывающей скобкой цикла ставим break.
В условии, где нужно выйти - тоже break.
for (;;) {
  if( ... ){
    if( .. ){
    } else {
     // здесь нужно выйти из условия
    break;
    }
  }
break;}


(то же самое)
while (true) {
  if( ... ){
    if( .. ){
    } else {
     // здесь нужно выйти из условия
    break;
    }
  }
break;}


(то же самое)
do {
  if( ... ){
    if( .. ){
    } else {
     // здесь нужно выйти из условия
    break;
    }
  }
break; } while (true);


(то же самое)
do {
  if( ... ){
    if( .. ){
    } else {
     // здесь нужно выйти из условия
    break;
    }
  }
} while (false);


Ну и стОит заметить, что если не пугаться goto, то ровно так же можно заюзать и его.
(в дизасме получится в точности то же, что и с циклами)
Ответ написан
Пригласить эксперта
Ответы на вопрос 10
@v_prom
Если ты попал в такую ситуацию, то значит некорректно задал предикат, скорее всего он должен быть составным.
Ответ написан
Комментировать
@plasticmirror
разве код
if (cond1) {
	//some code1
	if (cond2) 
	{
		//some code2
	}
	else
	{
		goto end;
	}
	//some code3
}

:end

не эквивалентен
if (cond1) {
	//some code1
	if (cond2) 
	{
		//some code2
		//some code3
	}
}


?
Ответ написан
Комментировать
svd71
@svd71
вообще вопрос дебильный. что значит "выйти из условия"? условие уже пройдено, больше выполняться не будет и даже если ничего не делать второй раз в условие непопасть.

Если перед условием стоят операторы организации цикла, но автор об этом вроде не закикается.
Ответ написан
AlexFreem
@AlexFreem
addicted
А по большому счету не надо ничего делать. Просто всё что требуется делать запихиваем в блок true второго условия и всё.

Логика проста. Если сработало первое условие и не сработало второе условие - не делать ничего. Циклов как говорилось комментарием выше не наблюдается.
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Можете разделить на несколько логичных методов
Ответ написан
Комментировать
@kasitan
if( условие A ){
    // блок 1
    if( условие B ) {
           // блок 2
    } else {
           // блок 3
    }
    // блок 4
}


назвал условия и блоки кода для наглядности. Можно отрефакторить это так:

bool A = calculateA();
bool B = calculateB();
if( A && B ){
    // блок 1
    // блок 2
    // блок 4
} else if ( А ) {
    // блок 1
    // блок 3
}


блок 1 следует вынести в какую-то функцию, видимо, чтобы избежать дублирования.
Ну и плюс не факт, что так получится, зависит еще, как минимум, от логики вычисления А и В.
if получился сомнительный, конечно, но как вариант.
Ответ написан
Комментировать
Alexious_sh
@Alexious_sh
Еще можно использовать исключения.
try {
    if( ... ){
        if( .. ){
        } else {
            // выход из условия
            throw new Exception();
        }
    }
} catch (Exception $e) {
    // Сюда можно добавить код обработки "выхода"
}
Ответ написан
Можно использовать что-то навроде флага. Если в первом условии флаг изменился, то второе пропускаем.
Ответ написан
Комментировать
kratkar
@kratkar
web-developer
Используя switch:
switch( ... ){
  case ... :
    if( .. ){
    } else {
       // здесь нужно выйти из условия
      break;
    }
    break;
}

Используя function+return:
function wtf(){
  if( ... ){
    if( .. ){
    } else {
       // здесь нужно выйти из условия
      return;
    }
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы