PHP и оператор goto будут добавлены в PHP 5.3 - PullRequest
18 голосов
/ 07 апреля 2009

Оператор "goto" происходит прямо из ASM или любого другого языка ассемблера.

Вот ссылка: http://be2.php.net/manual/en/control-structures.goto.php

Мне интересно: что это может сделать, чтобы мой код был лучше организован? Как я могу реализовать это в более крупных проектах, не облажаясь. Так как goto позволит вам прыгать вперед и назад, случайные назначения и бесконечные циклы ожидают выполнения, если вы используете это неправильно.

Может ли кто-нибудь дать мне пример хорошего использования этого?

РЕДАКТИРОВАТЬ: хорошо, я видел некоторые ответы, и, видимо, существует широкий консенсус по поводу использования выражения "goto", и оно является плохим.

Так что я все еще задаюсь вопросом: с какой стати PHP потрудился бы добавить его в язык. Если бы они не увидели что-то в этом, они не сделали бы это ... так почему?

Также: Обсуждение здесь на StackOverflow о "goto" в целом

РЕДАКТИРОВАТЬ 2: Видя, как этот вопрос вызвал много плохих вещей, чтобы быть грустным по поводу заявления goto, я пошел и спросил моего отца. Ему 52 года и он инженер-технолог.
Он пару раз говорил мне, что в свое время занимался программированием, в основном на фортране и коболе. В настоящее время он занимается ИТ-сервисами, управлением серверами и сетью и т. Д.

В любом случае, он сказал кое-что о "назад в мои дни ..."
Немного поговорив об этом, он вернулся к заявлению goto, сказав, что даже в студенческие годы они уже знали, что использовать его не было разумной идеей, но тогда у них не было намного лучше. До try / catch было еще много лет, а обработка ошибок практически не возникала.
Итак, что вы сделали, чтобы проверить свою программу? Добавьте в конце несколько строк, которые позволят вам напечатать вывод и все, что вам нужно, чтобы проверить свой код, а затем поместите строку: «перейти к печати;» или что-то в этом роде, чтобы начать печать ваших данных.

И таким образом вы постепенно отлаживаете свой код.

Он согласен с тем, что использование goto в современном мире программирования довольно бесполезно. Единственное использование, которое он считает оправданным, - это «аварийный перерыв», предназначенный для экстремальной отладки и неожиданных ситуаций. Вроде как goto fatal_error;, и часть вашего кода "fatal_error" делает некоторые вещи, чтобы показать вам подробные результаты.
Но только во время создания чего-либо. Готовый продукт не должен иметь goto-операторов.

LATE EDIT: Еще одно обсуждение "goto" в PHP5.3 / PHP6

Ответы [ 16 ]

0 голосов
/ 22 апреля 2017

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

Более 2 миллионов строк кода, которые я написал на всех языках, кроме машинного кода :-). Только дважды его использование было необходимо, и оба из-за проверки \ сортировки больших наборов данных дерева.

0 голосов
/ 13 ноября 2014

GOTO, ограниченная структура управления выполнением, может использоваться вместо циклов, но это крайне не рекомендуется. Его использование имеет тенденцию стимулировать создание неструктурированного кода, что является ужасной практикой. Скорее всего, лучше всего использовать его только в разработке, для отладки (пропустить большие объемы кода для доступа к конкретной проблемной области) и тестирования. Единственная другая цель для GOTO, возможно, для написания ассемблера; скорее всего, не. GOTO, если он используется вне разработки, должен использоваться экономно и только в качестве крайней меры. Если возможно, замените GOTO соответствующей структурой петли.

Что касается потока, связанного последним ( Команда GOTO в PHP? ):

Как сказал Измаил (под редакцией Гордона; безусловно, лучший ответ):

GOTO - это просто расширенный BREAK с возможностью «использовать статические метки». «По сути, это улучшит способность вырваться из вложенных операторов if».

0 голосов
/ 27 июля 2013

Большим преимуществом gotos является кривая обучения. Можно задаться вопросом, почему такие инструменты, как visual studia и macs, хорошо работают. Причина в том, что люди хотят больше, чем отличный продукт; они хотят отличный продукт, который они могут научиться использовать всего за час или около того. Многие программисты сейчас программа только дни как одна из их работ. Я вижу, как много книг говорят, что никогда не следует использовать goto, а затем дать пять или около того технологий, чтобы они сказали, устранить все нужно это. Я говорю, что именно тот факт, что они упомянули 5, является доказательством того, насколько хорошо является!!!!! У меня нет времени учить пяти вещам, которые включают структуры исключений, которые взять целые главы, чтобы объяснить !!!!! когда все, что вам действительно нужно, это простой можно объяснить за 30 секунд. Конечно, вы можете создать плохой код с ними, если программист хочет --- но эй, большинство программистов не хотят писать плохой код, и если они Могли ли они в любом случае. Большинство gotos в нашей лаборатории сделали код чрезвычайно простым для понимать и учиться; гораздо больше, чем чтение книги на 2000 страниц.

0 голосов
/ 14 декабря 2009

Сгенерированный код мог бы хорошо использовать goto, я думаю. Хорошая вещь о сгенерированном коде состоит в том, что вам не нужно поддерживать его - вы просто восстанавливаете его.

0 голосов
/ 07 апреля 2009

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

OTOH, я программировал на языке, где только две структуры были функциями и условными выражениями: SNOBOL4 . Поскольку риск спагетти-кода был очень высок, большинство программистов на SNOBOL4 старались избегать этого. Но gotos действительно позволил очень плотное программирование, выполнение творческих циклов и так далее. На самом деле делать циклы типа FSM несколько проще, если у вас есть только gotos.

0 голосов
/ 07 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...