Старое обсуждение:GOTO

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Внимание! Это старая дискуссия, которая некогда велась на сайте Луркоморье. Пожалуйста, для продолжения обратитесь к актуальной: Обсуждение:GOTO, которая проводится в стиле пленарного заседания.


C хуяли удалили? Скажите не мем? Скажите не срач? Причем удалили прямо в момент допиливания, лол. Перезалил допиленное, ибо воистену. Если уж удалять, удаляйте то что было кошерно.

Потому что руки автора растут из GOTO зада.

Статья про GOTO - и ни слова про его использование в реализации конечных автоматов? Ну песец, немедленно запилите. Самому лень и некогда.

Ну там все-таки GOTO немного не торт, он просто используется для перехода между состояниями и представляет собой функцию или макро, разве нет? Тут речь все-таки про GOTO как оператор. В статье написано, что есть ситуации, когда использование сабжа приемлимо. Обычно, насколько я помню, это прыжок в конец функции в случае ошибки, где происходит удаление памяти, закрытие дескрипторов ну и остальная чистка ресурсов. Это действительно может упростить код (особенно в Си), хотя есть и другие способы, зависит от языка.

Быдлокодеры с Хабра набигают?

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

Самая первая фотография - это, случайно, не бейсик для cюбора-денди на обучалке?

Статья[править]

Мне — ня. Ящитаю, нужно выпускать.

Внезапно вполне годная статья. А конечные автоматы не нужны имхо.

А про конечные автоматы и прочие состояния можно, конечно, запилить, но зачем? Может еще про for(;;), while(true) и прочий бесконечный цикл написать? А за одно и про ивентлупы, ага.

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

public void foo(int bar){
     my_block:{
          if(bar<10){
               System.out.println("Bar<10, plus-plus it!");
               bar++;
               break my_block;
          }
          System.out.println("All is good");
     }
}

привет от СА[править]

Использовать goto в языках, имеющих процедуры и функции и равносильно забиванию гвоздей гвоздем. Невозможность обойтись без goto означает означает:

а) программист не может в алгоритмы -> быдлокодер detected;

б) программист не знает других языков -> быдлокодер detected;

Другое дело - языки не имеющих таких структур. Касается, как правило, скриптовых языков (shell script), где процедуры записываются с помощью меток (goto), а функции - отдельными подпрограммами (run/start). Но все равно попахивает применением костылей.

в языке ассемблера[править]

А разве JMP (безусловный переход) и Jx (условный переход, вместо x — условие) в языке ассемблера не одно и то же, что и GOTO в языках высокого уровня? Интересно, как кто-то собрался писать полноценные программы без прыжков... никогда не понимал, чем гоуту опасен, хоть им почти не пользовался

Слегка разные вещи, потому как в Ассемблере иначе нельзя организовать условные конструкции, if-а там нет, да и циклы с условиями выхода иначе не сделать.
Кстати, старинные диалекты бейсика, из которых к нам и пришел GOTO <номер строки> очень смахивали на ассемблер с добавленным IF-THEN-ELSE. Другие отличия еще поискать надо было. Вот там можно было шикарные кружева плести с помощью сабжа. GOSUB-RETURN были намного поинтереснее (аналог call/ret), но и подпрограмму в таких бейсиках можно было навернуть хоть в середине программы, окружить END'ами (чтобы не орал про RETURN без GOSUB) и сделать обход с помощью тех же GOTO. Тихий ужас в общем.
Можно было. Но так делали только мудаки
Это если вручную. За не-мудаков это делал компилятор.

> никогда не понимал, чем гоуту опасен,

Тем, что при его использовании, работающую программу может написать даже человек у которого:

1) нет современного компилятора

2) нет сведений, как им ЭФФЕКТИВНО пользоваться.

3) нет денег на покупку мощного компьютера, который "потянет" п.(1)

4) и который, из-за (1),(2),(3) может писать программу только с GOTO.

Написав ее, он тем самым "отнимет хлеб" у "структурных программистов", (программа которых, при ее трансляции, все равно заменяет все их LOOP на кучу GOTO (а точнее - JMP и Jxx)). А без GOTO "неумехи" (те, кто не признали стандарты "структурных программистов") и "нищеброды" (без денег на мощный комп.) ничего написать не смогут. И "хлеб не отнимут".

Вот пример таких уродов, которые решили, что в AutoIt3 GOTO не нужен: http://en.helpdoc-online.com/autoit_v3/source/html/faq.htm#4 Ага, "640kb is enough for everyone" - только на новый стиль (наоборот). Они надеялись: "мы отсеем новичков (отняв у них GOTO), и все сразу станут опытными". "Больницы закроем - все тут же выздоровеют".

Скажите кто-нибудь им (http://www.autoitscript.com/forum/forum/12-autoit-v3/), что из за их такого отношения многие новички - просто не смогут написать свой первый скрипт. А Гуру в их продукции - все равно не хватит функций.

G0T0 же![править]

http://images1.wikia.nocookie.net/__cb20100424160603/ru.starwars/images/d/d5/G0-T0.jpg сферический, в вакууме.

Псс, потише. Я слышал за упоминание персонажей игр BioWare модеры линчу...АААА!!!!

Pascal[править]

В языке Turbo Pascal в модуле CRT имеется функция с символичным для русского человека названием "GoToXY", перемещающая курсор на нужное место на экране. Допишите, кто-нибудь пожалуйста, а то хрен поймешь вашу вики-разметку, а разбираться влом.

остро. по-заграничному. добавил.

Как мама научила[править]

Вот мне мама лет 15 назад казала ГОТО не юзай, а то будут тебя считать быдлокодером, так вот с тех пор и не юзаю, даже в простейших ситуевинах. Родители плохого не посоветуют!

Это бабушка плохого не посоветует, а родители могут. Допилите про "Футураму", это где

10 SIN 20 GOTO HELL и 10 HOME 20 SWEET 30 GOTO 10

Оператор GOTO не следует держать в собственной памяти, это типичная ошибка новобранца или возомнившего. Исключительное поле действий для операторов - блок схема, которую уважающий себе кибер-специалист всегда сделает (как план действий программного кода).

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

Резюме. Не нужно держать ничего в голове. Чем меньше она забита, тем легче ей справиться с работой. Столкнувшись же с необходимостью распутать, всегда следует начать с зарисовки принципиальной схемы и заручиться поддержкой заказчика/начальства, пусть на ней всегда будет виза. Тогда ошибка, а они возможны, будет на совести заказчика/начальника, а труд, пусть ошибочный, но полностью оплачен. В противном случае на исполнителя будет навешано обвинение в том, что во всём виноваты он сам (когда вскроется ошибочность логики, а доказательств у исполнителя отсутствующие, что ему так объяснили) и они будут правы, исполнитель мог понять неправильно правильное объяснение.

Если схема метода нужна для понимания метода - переписать его КЕМ, быстро, решительно (скорее всего, путем разбития на несколько меньших методов) — 217.165.23.102 13:50, 13 октября 2016 (MSK)

Алсо это японская фамилия например[править]

В частности http://en.wikipedia.org/wiki/Maki_Goto И вообще: http://en.wikipedia.org/wiki/Goto_(name)

Мило, только "имя" а не "фамилия". В Мунспике принято сначала писать фамилию, а потом имя...
Жаль, пиндосы этого не знают, и пишут таки фамилию в конце. Если не верите, пройдитесь по ссылкам и убедитесь. Собственно достаточно открыть вторую - она начинается со слов "Gotō is a Japanese surname", а далее расположен список всех известных носителей этой фамилии.

Алсо[править]

В KOTOR-II был плавающий робот GOTO, один из спутников ГГ.

Корректность GOTO ссылок после добавления нового раздела.[править]

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

Блджад, в Бейсике есть оператор RENUM, который мгновенно приводит всю нумерацию строк в кошерный вид, (10, 20, 30, etc) даже с учётом всех перенаправлений операторами GOTO. Нет никаких трудностей с корректностью GOTO-ссылок, ибо есть RENUM.

Алсо, есть оператор REM который позволяет комментировать, на какую подпрограмму ссылается GOTO. Так что проблема оператора GOTO это проблема быдлокодеров не желающих их комментировать.

REM это вообще самый важный оператор в Бейсике, но увы - не все это понимали.