Что не так с использованием goto? [дубликат]




Возможные Дубликаты:
Почему плохо использовать goto?
Гото все еще считается вредным?






Я был ramdomming через xkcd и видел это (если также читать некоторые негативные тексты о них несколько лет назад):
your slow connection sucks, get a faster one to see this image

Что на самом деле с ним не так? Почему тогда goto даже возможно в C++?



почему я должен не использовать их?

550   6  

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

    Ничего не найдено.