Обсуждение:GOTO
Материал из Lurkmore
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"); } }
в языке ассемблера
А разве JMP (безусловный переход) и Jx (условный переход, вместо x — условие) в языке ассемблера не одно и то же, что и GOTO в языках высокого уровня? Интересно, как кто-то собрался писать полноценные программы без прыжков... никогда не понимал, чем гоуту опасен, хоть им почти не пользовался
- Слегка разные вещи, потому как в Ассемблере иначе нельзя организовать условные конструкции, if-а там нет, да и циклы с условиями выхода иначе не сделать.
- Кстати, старинные диалекты бейсика, из которых к нам и пришел GOTO <номер строки> очень смахивали на ассемблер с добавленным IF-THEN-ELSE. Другие отличия еще поискать надо было. Вот там можно было шикарные кружева плести с помощью сабжа. GOSUB-RETURN были намного поинтереснее (аналог call/ret), но и подпрограмму в таких бейсиках можно было навернуть хоть в середине программы, окружить END'ами (чтобы не орал про RETURN без GOSUB) и сделать обход с помощью тех же GOTO. Тихий ужас в общем.
- Можно было. Но так делали только мудаки
- Это если вручную. За не-мудаков это делал компилятор.
- Можно было. Но так делали только мудаки
- Кстати, старинные диалекты бейсика, из которых к нам и пришел GOTO <номер строки> очень смахивали на ассемблер с добавленным IF-THEN-ELSE. Другие отличия еще поискать надо было. Вот там можно было шикарные кружева плести с помощью сабжа. GOSUB-RETURN были намного поинтереснее (аналог call/ret), но и подпрограмму в таких бейсиках можно было навернуть хоть в середине программы, окружить END'ами (чтобы не орал про RETURN без GOSUB) и сделать обход с помощью тех же GOTO. Тихий ужас в общем.
- Слегка разные вещи, потому как в Ассемблере иначе нельзя организовать условные конструкции, if-а там нет, да и циклы с условиями выхода иначе не сделать.
> никогда не понимал, чем гоуту опасен,
Тем, что при его использовании, работающую программу может написать даже человек у которого:
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 не следует держать в собственной памяти, это типичная ошибка новобранца или возомнившего. Исключительное поле действий для операторов - блок схема, которую уважающий себе кибер-специалист всегда сделает (как план действий программного кода).
Это не случайно, что рисование принципиальных схем принято за хороший тон в культурной среде программистов. При их отсутствии, логика будет сосредоточена лишь в одной голове, а будь она самой светлой, командная работа над гиганскими массива кодов станет невозможной. Принципиальная схема же скоординирует же коллективный и облегчит персональный труды.
Резюме. Не нужно держать ничего в голове. Чем меньше она забита, тем легче ей справиться с работой. Столкнувшись же с необходимостью распутать, всегда следует начать с зарисовки принципиальной схемы и заручиться поддержкой заказчика/начальства, пусть на ней всегда будет виза. Тогда ошибка, а они возможны, будет на совести заказчика/начальника, а труд, пусть ошибочный, но полностью оплачен. В противном случае на исполнителя будет навешано обвинение в том, что во всём виноваты он сам (когда вскроется ошибочность логики, а доказательств у исполнителя отсутствующие, что ему так объяснили) и они будут правы, исполнитель мог понять неправильно правильное объяснение.
Алсо это японская фамилия например
В частности 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 это проблема быдлокодеров не желающих их комментировать.