Как выйти из if
Перейти к содержимому

Как выйти из if

  • автор:

Как выйти из if-блока?

Можно ли это как-то сократить? Например, если бы можно было выходить из блока if , можно было бы не писать else . Но вроде бы оператор break такого не позволяет. Подскажите, что можно сделать?

Отслеживать
user256824
задан 28 ноя 2019 в 18:50
Aggravator Aggravator
273 5 5 серебряных знаков 23 23 бронзовых знака

Можно выходить почти из любого места программы, я использую для такого случая goto ! В метку вынес проверку переменной которая заполняется false в случаи ошибки и true удачи, вместо кучи return и блоков else.

28 ноя 2019 в 19:02
Я думаю оператор goto не то чтобы устарел, но является признаком плохого тона)
28 ноя 2019 в 19:17

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Вынесите ваш блок проверок в отдельную функцию и используйте return

Или поднимайте исключения

Отслеживать
ответ дан 28 ноя 2019 в 19:09
Anton Shchyrov Anton Shchyrov
33.1k 2 2 золотых знака 33 33 серебряных знака 61 61 бронзовый знак

В чем смысл тратить ресурсы на инициализацию дополнительной функции для возврата результата существующей функции ?) если не учитывать относительно масштабной обработки результата перед его возвратом с учетом повторений в нескольких местах (чего в вопросе не было)

28 ноя 2019 в 19:14

@noname2019 в повышении читабельности кода. Потери производительности при вызове ничтожна по сравнению со сложностью поддержки этого спагетти-кода

28 ноя 2019 в 19:17
В чем читабельность то ? в увеличении и усложнении кода ?
28 ноя 2019 в 19:18
@noname2019 в структурировании и разделении программы на логические блоки
28 ноя 2019 в 19:20

против функций возражений не имею, но исключения то тут каким боком, автор же не заявляет, что это проверки ошибок каких-либо.

28 ноя 2019 в 22:30

Не знаю, как отнесутся к этому адепты правильного кода на php, но можно использовать . цикл:

foreach([1] as $_not_used) < if(условие) < . if(условие) < break; >. > if($a==4) < break; >> 

Кроме того, если условия подходящие, возможно использование конструкции switch. А так же вложенных конструкций циклов и switch с указанием оператору break количества уровней вложенности, из которого выходить.

Как выйти из if java

Во время выполнения программы на Java выход из конструкции if else осуществляется автоматически, как только код внутри тела конструкции будет выполнен.

int a = 15; int b = 10; // создадим конструкцию if else для проверки условия (a > b) if (a > b)  System.out.println("Мы находимся внутри if else, так как условие (a > b) верно"); > System.out.println("Мы вышли из if else, так как код внутри конструкции был выполнен") 

Вывод в консоли будет следующим:

Как лучше делать выход из if-then?

Проверяется наличие каталога, если он есть, то нужно выполнить команды после fi, если нет (else) — создать каталог. Как лучше прекратить выполнение if-then в случае наличия каталога? Я не придумал ничего лучше, чем сделать так:

if [ -d "$TRUNK_NAME" ] then : else mkdir $TRUNK_NAME fi 

cr0x
26.04.12 17:39:34 MSK

[ ! -d "$TRUNK_NAME" ] && mkdir "$TRUNK_NAME"

backbone ★★★★★
( 26.04.12 17:43:01 MSK )

if [ ! -d "папка" ]; then echo "нету папки. " fi 

anonymous
( 26.04.12 17:43:57 MSK )
Ответ на: комментарий от backbone 26.04.12 17:43:01 MSK

Ойбл, а я ! перед скобкой тыкал и удивлялся почему не работает. Ладно, спасибо.

cr0x
( 26.04.12 17:44:45 MSK ) автор топика
ABW ★★★★★
( 26.04.12 17:49:10 MSK )

Тут другой вопрос — нужно ли выходить из if.

Всегда мучает вопрос — что лучше — выполнить тело функции внутри if или после.

if x!=0 then z = y/x return z else return $error endif 
if x==0 then return $error endif z = y/x return z 

Suntechnic ★★★★★
( 26.04.12 17:49:55 MSK )
Ответ на: комментарий от Suntechnic 26.04.12 17:49:55 MSK

Надеюсь понятно что это диалект клингонского.

Suntechnic ★★★★★
( 26.04.12 17:50:59 MSK )
Ответ на: комментарий от Suntechnic 26.04.12 17:50:59 MSK

Если у тебя есть некий блок кода (функция, например), из которого нужно выходить в случае чего (ошибки, например), то тело пиши после if. А если есть возможность обрабатывать исключения — выходи из функции сигнализировав исключение. Ку?

Zorn
( 26.04.12 18:28:16 MSK )

[ -d "$TRUNK_NAME" ] || mkdir "$TRUNK_NAME"
mkdir -p "$TRUNK_NAME"

А ещё есть true, false и ;

schizoid ★★★
( 26.04.12 19:41:51 MSK )
Ответ на: комментарий от Zorn 26.04.12 18:28:16 MSK

С исключениями очевидно. Но почему тело после if? Вроде как тело внутри if выглядит более логичным — всегда ясно что мы обработали все что нужно в if. С другой стороны я так делаю только если функция в 3-4 строки, а в остальных случаях пишу после if — типа вначале все обработали и «гуляем» спокойно.

Suntechnic ★★★★★
( 26.04.12 21:17:08 MSK )

Щас придут лисперы и подробно тебе объяснят на десяти страницах.

anonymous
( 26.04.12 21:24:45 MSK )

а зачем проверять?

mkdir -p $TRUNK_NAME

lazyklimm ★★★★★
( 27.04.12 00:37:57 MSK )
Ответ на: комментарий от Suntechnic 26.04.12 17:49:55 MSK

Конечно же только второй вариант. Он даже чисто визуально менее загроможден, такой код легче читать. Представь ситуацию, тебе надо понять код

if condishion then /* тут двадцать строк кода */ else return $error 

К тому моменту как ты дочитаешь до else, врубаясь в алгоритм, ты потеряешь контекст и прийдется отматывать назад, чтоб посмотреть почему кидается ошибка.

Насколько лаконичней и элегантней смотрится

if not condition return $error /* тут код */ return $result 

Yur4eg ★★
( 28.04.12 11:51:22 MSK )
Ответ на: комментарий от Yur4eg 28.04.12 11:51:22 MSK

Ну вот поэтому в больших функциях так и делаю. Но хотелось единообразия. Раз такой вариант набрал больше всего голосов — буду использовать его все время.

Как выйти из условия if?

Пользователю предлагается выбор, он должен ввести 1 или 2. Я хочу учесть и ситуацию, когда пользователь ошибся, и,чтобы не перезапускать программу, мог бы исправить введенное значение. Но что-то никак не могу понять, как после «Wrong insert», введя число, заставить компилятор снова проверить первое условие if?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
std::cin >> a; if (a>2 || a1) { std::cout  <"Wrong insert, please try again\n"; std::cin >> a; // вот он ввел снова, ведь нужно же теперь опять проверить, если это 1 или 2. } else if (a = 1) { print(x, x + s, epsilon, &function1); } else { print(x, x + s, epsilon, &function2); }

Буду благодарна.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

рассмотреть указанную последовательность в цикле и выйти из цикла, достигнув указанного условия
рассмотреть указанную последовательность в цикле и выйти из цикла, достигнув указанного условия с.

Как выйти?
Как можно выйти из АГС, ссылок в индексе было 400 стало 17 http://unionclub.ru/

Как обратиться с сервера на клиент (или как выйти из безнадежной ситуации)
Здравствуйте.Проблема стоит в том что набор записей регистра сведений проверяет наличие изменений.

Как выйти из JApplet?
Написала игрушку "жизнь", представляющую собой JApplet. Хочу что бы при нажатии на кнопку exit окно.

2209 / 1707 / 722
Регистрация: 27.07.2012
Сообщений: 5,091

IMtheSupervisor, проверку ввода поместить в цикл, условием выхода из которого — правильный ввод.

Добавлено через 1 минуту

1 2 3 4 5 6 7 8 9 10 11 12 13
bool end = false; while (!end) { cin >> a; if ((a != 1) && (a != 2)) { // неправильный ввод } else { // правильный ввод end = true; } }

Эксперт С++

13663 / 10580 / 6322
Регистрация: 18.12.2011
Сообщений: 28,247

1 2 3 4 5 6 7 8 9 10 11 12
int a; do while (a>2 || a1); if (a == 1) // . == . print(x, x + s, epsilon, &function1); else print(x, x + s, epsilon, &function2);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *