Другие языки программирования и технологии

Почему goto считается неправильным оператором? И как предлагается "правильно" выйти из третьего вложенного цикла?

break?
Боря Бабенко
Боря Бабенко
2 911
Лучший ответ
Владислав Лозовой Мне нужно выйти из всех трёх сразу.
Олег Кольцов Этого оператора лучше тоже избегать.
В основе структурного программирования (созданного совсем не в IBM: ни Дейкстра, ни Хоар, ни Вирт, являющиеся реальными создателями данной концепции, никогда в этой компании не работали) лежит принцип единственной точки входа и единственной точки выхода каждого оператора. Это упрощает как понимание, так и доказательство правильности программ.

Оператор goto создают дополнительную точку выхода и тем серьёзно осложняет жизнь тем, кто будет после тебя проверять и/или модернизировать код. Для домашних поделок это не важно, а вот для больших проектов плохо поддерживаемый код - это огромные убытки.
Всё можно. если добавить логический признак выхода из всех циклов.

If all_break break

И всё.

А go to - гадость. "Плавали - знаем! "
А ещё некоторые делают функцию и return...

А ещё можно exception кинуть (из области очень вредных советов)... Вот тут точно медленно пополз на кладбище копать могилку.. =)

Главное не goto =)
Владислав Лозовой Я не понимаю, от чего все так не любят goto? От примера выше я бы застрелилась)
Или безусловный переход - привилегия компилятора?
Владислав Лозовой А с тех пор как нам рассказали про исключения, я боюсь одногруппников. Один начал писать программы, компоненты в которых взаимодействуют исключительно матом... то есть, исключениями.
Ну, считается "неправильным", по принципам структурного программирования, как выше уже заметили, больше ни почему.
Но выход из самого внутреннего цикла, это также против принципов структурного программирования! Я бы этого делать не стала, а логически разделила бы циклы в глубину: чтоб во внутреннем цикле не было причин выходить на самый внешний уровень. Но без кода конечно не понятно.
Shalva Bakradze
Shalva Bakradze
48 987
Все просто, каждый раз когда производится выполнение процессором комманды происходит расчет следующиего выполняемого оператора и следующего адресса. И тут бах переход, вместо выполнения полезного действия мы опять считаем что же будет дальше. Т. е мы получаем простой процессора на неслколько тактов
Ваня Кульков
Ваня Кульков
35 594
Сергей Пынзарь Разве это в конвейере не учитывается? Есть ведь специальная штука прогнозирование переходов зашитая в камень.
Goto считается неправильным с тех пор, как разработчики IBM чуть было не облажались, создавая операционную систему. Из-за обилия goto у них получился так назваемый спагетти-код, когда в обилии переходов невозможно было разобраться. Приличных отладчиков тогда не было, а программа становилась нечитаемой.

Вот тогда появилось такое понятие как "Структурное программирование", и в основопологающей книге по этой дисциплине IBMеры вполне научно доказали, что без goto можно обойтись. Т. е. не существует такой управляющей конструкции, которую нелья было бы трансформировать в аналогичную, но с использованием выбора по вариантам, цикла и условного оператора. С тех пор от goto шарахаются. А как же, этот оператор чуть IBM в 60х не обанкротил! :-)
Владислав Лозовой Говорят, после 128 вложенного if компилятор майкрософт перестаёт их обрабатывать... застрелиться можно чем угодно.
Гото обычно хейтят крестовики - по большому счету ничего вредного от него нету, единственный минус - это усложнение кода. Ассемблер разворачивает циклы примерно в такие же гото...
Федор Балашов
Федор Балашов
8 452
Владислав Лозовой Введение трёх переменных и трёх условий по их проверке не усложняет код? Ок...
Просто через проверку true/ false.

Потому что увеличивается вероятность ошибки и нелогичность.
Как костыль делаешь некоторые переменные, условия выхода. и перед break устанавливаешь флаг в true. Пример приложен

Почему goto - неправильно. Неправильного ничего нет, просто использование перехода по меткам затрудняет понимание кода очень сильно
Нурбек =)))
Нурбек =)))
710
Нурбек =))) Если есть другие идеи как это сделать - я готов Вас выслушать