Оператор goto в PHP

На PHP пишу уже давно, но только сегодня узнал, что начиная с версии 5.3 этот язык начал поддерживать goto оператор. Я помню еще в 90-х годах, когда программировал под MS Dos уже среди программистов ходило правило - не использовать goto. Это зло, которое портит программы. С тех пор утекло уже много лет и я никогда не пользовался goto под Windows ни в одном языке программирование.

Удивило то, что этот оператор появился в PHP 5.3. Я бы понимал, если бы он появился в первых версиях, а в 5.3 его убрали, как настоящее зло, но наоборот... Неужели мир перевернулся и переходы по меткам стали добром?

Оператор goto в PHP выглядит следующим образом:

goto codemark;
echo 'Этого вы никогда не увидите';

codemark:
echo 'А вот это увидите';

Даже в процедурных языках программирования можно без проблем обходится без goto, а уж в объектных языках (а PHP уже давно поддерживает объекты), добавлять переходы по меткам не вижу смысла. Узнали о существовании goto? Забудьте. Не используйте это, а если используйте, то только в очень крайних случаях.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Максим Михайлов

26 Мая 2012

Поэтому программы на Бейсике называют клубком из нитей и советуют начинать с Паскаля.


Влад

26 Мая 2012

Помню ещё в институте, когда вталкивали турбо-паскаль говорили:
"Увижу у вас этот оператор - будете сами программу отлаживать" :)


Михаил Фленов

26 Мая 2012

Да, оператор goto был нужен только в бейсике. Как только появилось процедурное программирование, от него стали отказываться. В объектном языке он вообще на фиг не нужен.


XHelp

26 Мая 2012

На таких темах всё время вспоминается текст Ed Post'а


   * Real Programmers aren't afraid to use GOTO's.
   * Real Programmers can write five-page-long DO loops without getting confused.
   * Since FORTRAN doesn't have a structured IF, REPEAT ... UNTIL, or CASE statement, Real Programmers don't have to worry about not using them. Besides, they can to simulated when necessary using assigned GOTO's.

:)
Еще интересный момент как относится к этому само php-общество. Для этого просто стоит посмотреть документацию на goto на сайте, а конкретно вставленный там xkcd комикс


Александр Перечнев

28 Мая 2012

Не понимаю почему все так бесятся насчёт goto. Однажды у нас на работе возникла реальная ситуация, когда за счёт этого оператора читаемость кода функции увеличилась в стопицот раз. Пусть это и единичный случай, но всё же. Мне кажется, это чисто программистские понты.


Макс

29 Мая 2012

Его критика - невнимательность программистов, которые "прыгают" настолько лихо, что "прыжком" пропускают инициализацию/объяление переменных/вызов конструкторов и т.д., из-за чего и происходит всевозможные утечки и ошибки доступа.
Всего не услидить, поэтому всё равно лучше больше чем в самых оправданных местах (выход из нескольких циклов, обработка ошибок и т.д.) его не использовать.

Ну а что бывает когда их пытаются использовать новички - вы сами понимаете что получается, поэтому в институтах и литературе его так не любят...


IAIOA

29 Мая 2012

Пытался найти линк пруфа но не смог, видимо подтёрли новость увидев среднюю реакцию "толпы" на ввод оператора GOTO. Ну раз не нашел напишу так)
"With GOTO implementation PHP finaly becomes a real programming language. So far it was a childrens toy." Ну где то такая вот штука висела на сайте PHP от создателей в первые часы после опублекования новости.
Кстати Михаил а вы не слышали, вроде как GOTO ещё в яве и ряде других языков ввели примерно в тоже время?


XHelp

29 Мая 2012

В яве оператора goto нету. В этом году была первоапрельская шутка по этому поводу в блоге Joseph Darcy из Оракла.

Однажды у нас на работе возникла реальная ситуация, когда за счёт этого оператора читаемость кода функции увеличилась в стопицот раз

Это еще не значит, что goto нужно пользоваться. В большинстве лучшев это просто значит, что первоначально был плохой код. Но было бы интересно увидеть эту реальную ситуацию.


Макс

29 Мая 2012

Самое банальное улучшение кода - http://pastebin.com/5jvBMMtP. В той же Java из-за отсутствия goto для таких случаев придуман миханизм вида http://pastebin.com/XhfzxBis. Код, конечно, немного подутрирован, но должно быть понятно. Если аккуратно его использовать - и читаемость, и скорость выполнения кода повышается.


XHelp

29 Мая 2012

Макс, в этом примере абсолютно отсутсвует смысл. Я ни разу не сталкивался со случаем, где бы label-break в яве являлся полезной ф-цией. А кусок php-кода это вообще какой-то страшный сон архитектуры и поддержки кода.
К тому-же еще и не соглашусь насчёт скорости выполнения: в яве есть HotSpot, который не плохо оптимизирует код. Каждое вмешательство и поток программы это палка в колёсах оптимизации.
Конечно-же можно найти теоретические примеры, где чисто теоретически, откидываю весь здоровый смысл, и зыкрывая на что-нибудь глаза goto-оператор улучшать работу программы, но "теоретическим" людям нужно писать на машинах тюринга а не пытаться воплотить эти идеи в программировании на высших языках.


Макс

30 Мая 2012

Пример, конечно, утрирован, на лично я сталкивался и не раз: матрицы, низкоуровенный парсинг, криптографические алгоритмы и т.д....

А надеятся только на оптимизатор кода - глупо. Оптимизаторы чаще как правило либо вообще разворачивают циклы, либо не трогают их вообще.


XHelp

30 Мая 2012

А почему бы не выносить код в отдельные методы? Твой метод на яве запросто разбивается на 3 разных метода, которые легче понимать, тестировать и т.д.
Я всё еще хотел бы увидить какой-нибудь конкретный пример, где goto или label-break's были бы уместны. Без конкретных примеров можно друг-друга в пустую пытаться переубедить.
Но не зависимо от примеров или дальнейшего хода обсуждений - у каждого есть право на своё мнение. Лично мне за один из твоих кодов на работе руки оторвут и засунут куда не надо.


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

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

Пишите мне