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

Почему все так ненавидят Goto?

Хотелось бы узнать, почему некоторые программисты-олдфаги так не любят goto и действительно ли его использование - смертный грех)
ЗЫ: прошу не разводить холивар, отвечайте аргументировано)
1) Что по сути есть Goto - для машины это всего лишь переход на инструкцию в какой-то подпрограмме, шутки ради можно goto реализовать в F# или Ruby например, но это сведется к вызову функций. В машинно-зависимых низкоуровневых языках goto жизненно необходим - это стандартная операция над указателем инструкций процессора IP (instruction pointer). Другими словами, goto (CMP/JMP) будет присутствовать так или иначе в любой скомпилированной в машинные инструкции программе.
2) Локальные переходы в теле функций или дальние прыжки можно оформить вызовом switch или if..else или вызывать нужный блок/функцию путем передачи определенных указателей/делегатов/параметров/блоков/лямбд внутрь подпрограммы. А когда функция/код является органичной частью языка, goto не нужен, а все другие операторы управления исполнением программы можно обобщить, как это сделали в F# http://msdn.microsoft.com/ru-ru/library/dd233228.aspx и др. функциональных языках.
АО
Айбек Ормуков
8 955
Лучший ответ
Никто его не ненавидит, в ассемблере, например, без него невозможно сделать цикл или условие. Просто читается, что он разрывает линейность выполнения программы, как break в циклах, а это считается плохим тоном. Но если так написать проще и быстрее, то почему бы нет? Главное — хорошо прокомментировать свой код, чтобы всё осталось понятным.
Этот оператор не совместим со структурным и модульным программированием. С его помощью можно так запутать программу что сам черт ногу сломает.
Классическая книга даст ответ на твой вопрос
У. Дал, Э. Дейкстра, К. Хоор. Структурное программирование. 1975 год.
Dauren Muslim
Dauren Muslim
97 139
Его не ненавидят.
Как написал Назаров Артем, GOTO вошел в языки высокого уровня из языков низкого уровня для более удобного переноса старых алгоритмов. Сейчас уже все по другому, он просто не нужен. Например, в JAVA его вообще нет
плохой стиль. в редчаййших случаях уж когда никак не найти выход можно его использовать
Некит.= )
Некит.= )
30 071
оператор goto делает код менее понятным, а спарка из нескольких goto превращает даже небольшую программу в неструктуризованную лапшу.

именно поэтому использовать его нужно как можно реже и по делу.

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