Что не так с использованием goto? [дубликат]
Возможные Дубликаты:
Почему плохо использовать goto?
Гото все еще считается вредным?
Я был ramdomming через xkcd и видел это (если также читать некоторые негативные тексты о них несколько лет назад):
Что на самом деле с ним не так? Почему тогда goto даже возможно в C++?
почему я должен не использовать их?
6 ответов:
потому что они ведут к спагетти код.
в прошлом языки программирования не имели while () if () etc, и программисты использовали goto для составления логики своих программ. Это приведет к недостижимому беспорядку.
вот почему боги CS создали функции условные обозначения и циклы. структурированная Программирование было революцией в то время.
goto подходят в нескольких местах, например, для прыжков из вложенных циклов
ничего
gotoесли он используется правильно. Причина этого "табу" заключается в том, что в первые дни C программисты (часто исходящие из фона сборки) будут использоватьgotoчтобы создать невероятно трудный для понимания код.большую часть времени, вы можете жить без
gotoи будет хорошо. Есть несколько примеров, однако, гдеgotoможет быть полезно. В качестве примера можно привести такой случай:for (i = 0; i < 1000; i++) { for (j = 0; j < 1000; j++) { for (k = 0; k < 1000; k++) { ... if (condition) goto break_out; .... } } } break_out:С помощью
gotoчтобы выпрыгнуть из a глубоко вложенный цикл часто может быть чище, чем использование переменной условия и проверка ее на каждом уровне.используя
gotoдля реализации подпрограмм является основным способом его злоупотребления. Это создает так называемый" спагетти-код", который излишне трудно читать и поддерживать.
нет ничего плохого в goto в себя. Это очень полезная конструкция в программировании и имеет много допустимых применений. Лучшее, что приходит на ум, - это структурированное освобождение ресурсов в программах на C.
где Гото идут не так, когда они злоупотребляют. Злоупотребление Гото может привести к полностью нечитабельной и неудобной в сопровождении код.
в 1968 году Edsger Dijkstra написал знаменитое письмо в редакцию связь АСМГото считается вредным в котором он изложил случай для структурированного программирования с циклов while и если...затем...иначе условные. Когда GOTO используется для замены этих структур управления, результат очень часто спагетти код. Почти каждый язык программирования используется в день структурированный язык программирования и использование GOTOs были в значительной степени устранены. На самом деле, Java, Scala, Ruby и Python не имеют
gotoкоманда вообще.C, C++ и Perl все еще имеют команду GOTO, и есть ситуации (в частности, в C), где a Гото полезно, например оператор break, который завершает несколько циклов, или как способ концентрации кода очистки в одном месте в функции, даже если существует несколько способов завершения функция (например, возвращая коды ошибок в нескольких точках в ходе выполнения функции). Но в целом его использование должно быть ограничено конкретными шаблонами проектирования, которые требуют его контролируемого и признанного способа.
(В C++ лучше использовать RAII или a ScopeGuard(больше) вместо использования GOTO для очистки. Но Гото-это часто используемая идиома в ядре Linux (другой источник), который является прекрасным примером идиоматические код C.)
комикс XKCD-это шутка на вопрос "Должен ли GOTO всегда считаться вредным, когда есть определенные конкретные шаблоны проектирования, которые в значительной степени помогают его использованию?"
Вы google вопрос?
основателем движения против Гото является Эдсгер Дейскстра со своим легендарным "Гото считается вредным"
чтобы вы начали вы можете перейти (ха-ха!) http://en.wikipedia.org/wiki/GOTO
это возможно в C++, потому что это возможно в C. должны ли вы или не должны использовать это давняя религиозная война.
Comments