<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=GOTO</id>
	<title>GOTO - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://t8.lbstr.eu/index.php?action=history&amp;feed=atom&amp;title=GOTO"/>
	<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=GOTO&amp;action=history"/>
	<updated>2026-11-03T04:54:42Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://t8.lbstr.eu/index.php?title=GOTO&amp;diff=1981&amp;oldid=prev</id>
		<title>127.0.0.1: Григорий Зельднер</title>
		<link rel="alternate" type="text/html" href="https://t8.lbstr.eu/index.php?title=GOTO&amp;diff=1981&amp;oldid=prev"/>
		<updated>2020-08-28T16:45:31Z</updated>

		<summary type="html">&lt;p&gt;Григорий Зельднер&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Q|10 SIN&amp;lt;br /&amp;gt;20 GOTO HELL|[[Футурама|Роботы]] о сабже.}}&lt;br /&gt;
&lt;br /&gt;
== 10 ==&lt;br /&gt;
[[Файл:10-goto-20.jpg|thumb|Сферичнее только 10 GOTO 10]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GOTO&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;гоу ту&amp;#039;&amp;#039;, [[быдлокодер|бдлкдр.]] &amp;#039;&amp;#039;гото&amp;#039;&amp;#039;) — слитное написание английского &amp;#039;&amp;#039;go to&amp;#039;&amp;#039;, что переводится как «[[КЕМ|иди к…]]» либо «[[ПНХ|иди на…]]», оператор безусловного перехода к указанной после него метке/строке программы. Причина лютых срачей между программистами. Споры на тему «дозволено ли GOTO или нет» (можно ли ТАКОЕ употреблять в программах) идут с самого начала существования [[Pure C|структурного программирования]].&lt;br /&gt;
&lt;br /&gt;
При ненадлежащем использовании в коде этот самый код становится [[я нихуя не понял|непонятен]] даже создателю. При годном использовании может СИЛЬНО облегчить код и исключить использование более сложных конструкций. Собственно срач подразумевает [[быдлокодер|первый случай использования]].&lt;br /&gt;
__TOC__&amp;lt;br clear=both /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 20 GOTO [[#60 Суть|60]] ==&lt;br /&gt;
&lt;br /&gt;
== 30 Срач ==&lt;br /&gt;
{{Q|Как пользоваться оператором GOTO? Подскажите, пожалуйста. А то друг подарил книгу — самоучитель С++, а страница с goto — вырвана.|na=1}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:GOTO.jpg|thumb|[[IRL]]]]&lt;br /&gt;
&lt;br /&gt;
Вы удивитесь, но первый троллинг GOTO возник ещё в 1968 году, когда [[:w:Эдсгер Дейкстра|Эдсгер Дейкстра]] написал высер «Go To Statement Considered Harmful» («Оператор GOTO считается опасным», точнее «О вреде оператора GOTO», ещё точнее — «взгляд на GOTO, как на вредный оператор», а изначально — «A Case Against the Goto Statement», [http://itre.cis.upenn.edu/~myl/languagelog/archives/004675.html заменённое] редактором журнала [[:w:Communications of the ACM|Communications of the ACM]] Никлаусом Виртом на название с популярным уже тогда «Considered Harmful». Оба названия можно перевести как «[http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/pp/ewd215.html Доводы против оператора GOTO]»; в них самих не ненависть или утверждение о всеобщей нелюбви к GOTO, а только указание на то, что в статье будет критика). Прочесть [http://www.vspu.ac.ru/~chul/dijkstra/goto/goto.htm его] крайне рекомендуется — там тонны лулзов (несмотря на то, что переводил явно надмозг). Чего только стоит первое же предложение: «За многие годы я утвердился во мнении о том, что квалификация программистов — функция, обратно зависящая от частоты появления операторов go to в их программах».&lt;br /&gt;
&lt;br /&gt;
Еще более доставляет тот факт, что фраза «[[:en.w:Considered Harmful|Considered Harmful]]» сама по себе стала мемом. Так, ответ на статью Дейкстры назывался «&amp;#039;GOTO Considered Harmful&amp;#039; Considered Harmful», ответ на неё назывался «&amp;#039;„GOTO Considered Harmful“ Considered Harmful&amp;#039; Considered Harmful?» и [[Рекурсия|так далее]] (всего 78 (!) статей с данной фразой).&lt;br /&gt;
&lt;br /&gt;
Вообще, в двух словах критика GOTO выражается очень просто: «Хуй поймешь, в каком порядке выполняется этот код». Отладка кода, щедро усыпанного GOTO, напоминает распутывание клубка ниток, причем состоящего из разных кусочков ниток, которые надо собрать в определенном порядке. Кстати, согласно этому оператору, данную статью следует читать начиная с первого раздела, а потом перейти к шестому, и если вы это читаете, не прочтя шестой, то вы ламер, лол.(пруф линк)(факты=}лузлы)goto...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Кстати, если хотите на своем опыте понять проблему GOTO, попробуйте добавить в эту статью новый раздел, &amp;#039;&amp;#039;сохранив&amp;#039;&amp;#039; корректность всех GOTO-ссылок.&lt;br /&gt;
&lt;br /&gt;
Так вот, упомянутый во втором разделе язык Basic подвергался отдельной критике Дейкстры: «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации». А ещё он назвал копирования отечественными компостроителями архитектуры IBM «Величайшей диверсией Запада против СССР», и, ЧСХ, отчасти оказался прав!&lt;br /&gt;
&lt;br /&gt;
Вернемся к GOTO. Любопытный факт: несмотря на массовую нелюбовь, он есть в большинстве современных языков программирования. И [[выстрелить себе в ногу]] с его помощью могут многие, под здоровый смех более просветленных [[быдлокодер]]ов. Но, что интересно, оператор GOTO имеется в исходниках весьма популярных программ, вроде ядра [[линукс]]а или гугловского «[[Андроид]]а», более того, сам [[Линус]] [https://lkml.org/lkml/2003/1/12/128 одобряет] использование GOTO в языках программирования не таких дурацких, как Pascal. Почему? Потому что существуют редкие случаи, когда его использование несколько упрощает код. Другое дело, что использование его вне этих случаев немедленно приводит к полному пиздецу. Впрочем, случаи этого в последнее время не так уж часты — вероятно, по той причине, что многие ньюфаги, не знавшие раннего Бейсика, просто &amp;#039;&amp;#039;не знают&amp;#039;&amp;#039; о том, что такой оператор существует (для [[PHP]]-быдла он, как правило, и [[не нужен]], потому что там редко встретишь сколь-либо сложные алгоритмы).&lt;br /&gt;
&lt;br /&gt;
Все это, однако, не мешает периодически выходить новым статьям, доказывающим или опровергающим то, о чем Дейкстра и его оппоненты написали полвека назад. Под любой такой статьей немедленно начинается спор между GOTO-фагами и GOTO-ненавистниками. Вторые обычно аргументируют «GOTO нельзя, потому что GOTO нельзя, и вообще можно ту же задачу решить без него», а первые осторожно замечают, что иногда это все-таки можно (если не прыгать вверх по программе), к тому же в некоторых языках не хватает адекватных заменителей, а на этих языках по-прежнему пишется код. Например, выход из многовложенных циклов на Си — можно извращаться с return-ами или делать флаги выхода, но, бля… А можно и не извращаться: по правилам структурного программирования break и вложенные циклы строго запрещены, потому что это сводит читаемость кода (и, как следствие, его работоспособность) к нулю. Про бесконечный цикл while(true) вообще молчим. [[ТруЪ|Правильный]] вариант — использование функций, возвращающих false в случае, если нужно срочно выйти из цикла. Немного соображающий в кодинге тролль может вызвать немало ненависти, выступая за ту или другую сторону.&lt;br /&gt;
&lt;br /&gt;
Но надо сказать, что современные языки с GOTO все-таки стараются ограничить его применение — так, обычно нельзя так просто прыгать между функциями. Так что GOTO [[уже не тот]], что был раньше. Но мы помним!&lt;br /&gt;
&lt;br /&gt;
== 40 На самом деле ==&lt;br /&gt;
[[На самом деле]], GOTO — это &amp;#039;&amp;#039;единственный&amp;#039;&amp;#039; оператор, который используется для управления выполнением кода этими вашими центральными процессорами. Для всякого ЦП есть в сущности два способа управлять кодом: условный оператор (если да, то выполнить следующую команду, иначе выполнить послеследующую) и перейти на другой участок кода (GOTO). Всё. А что вы хотели, [[:w:Машина Поста|машина Поста]], [[десу]]! И все эти ваши процедурное программирование, функциональное программирование, ООП, ААП, замыкания, циклы и прочая синтаксическая ересь — после компиляции превращается в сотни, тысячи, миллионы GOTO (а точнее, в JMP, JE, JLE, JGE, JNE, [[etc.]]), я гарантирую это!&lt;br /&gt;
Несогласные goto 30&lt;br /&gt;
&lt;br /&gt;
== 50 GOTO [[#80 См. также|80]] ==&lt;br /&gt;
&lt;br /&gt;
== 60 Суть ==&lt;br /&gt;
[[Файл:GOTO.png|Последствия использования|thumb|320px]]&lt;br /&gt;
Оператор GOTO — древнейший оператор. Используется он для безусловного перехода из одной точки кода в другую. До появления процедур и функций был по сути единственным способом запустить один и тот же код несколько раз. В [[x86|x86-ом]] [[ассемблер]]е этому оператору соответствует JMP.&lt;br /&gt;
&lt;br /&gt;
Люди, начинавшие программировать на раннем Basic&amp;#039;е, безусловно помнят, что каждая строчка на нем нумеровалась (10, 20 и т. д.). Соответственно, написав &amp;#039;&amp;#039;&amp;#039;GOTO 10&amp;#039;&amp;#039;&amp;#039;, можно было скакнуть в самое начало программы. Или ещё куда-нибудь. Многие ранние версии Бейсика позволяли вычисляемый GOTO (хоть от функции RND или INPUT), а иногда в таком лапидарном виде:10 RUN. В более современных языках появились символьные метки, так что стало возможным писать &amp;#039;&amp;#039;&amp;#039;goto [[ПНХ|nahuy]];&amp;#039;&amp;#039;&amp;#039; или ещё что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
== 70 GOTO [[#30 Срач|30]] ==&lt;br /&gt;
&lt;br /&gt;
== 80 См. также ==&lt;br /&gt;
* [[Рекурсия]]&lt;br /&gt;
* [[Пункт А]]&lt;br /&gt;
* [[Пункт Б]]&lt;br /&gt;
* [[Григорий Зельднер]]&lt;br /&gt;
&lt;br /&gt;
== 90 Ссылки ==&lt;br /&gt;
* [http://habrahabr.ru/company/intel/blog/206030/ GoTo ЖиВ!]&lt;br /&gt;
&lt;br /&gt;
== 100 END ELSE GOTO [[#10|10]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Языки программирования}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Lurkmore:Selfdescriptive]]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>