Обсуждение: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. Тихий ужас в общем.
Можно было. Но так делали только мудаки
Это если вручную. За не-мудаков это делал компилятор.

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

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

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 это проблема быдлокодеров не желающих их комментировать.