GOTO! Куда-куда?

Автор VlhOwn, 25 января 2011, 16:34

0 Пользователи и 1 гость просматривают эту тему.

VlhOwn

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

convas

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

Это все пустые домыслы "теоретиков" программирования.

Чем Вы предлагаете заменить конструкцию?
On Error GoTo ...


Нужны конкретные примеры "ошибок", возникающих при использовании GOTO, как утверждает инженер исследователь.

bormant

Цитата: convas от 25 января 2011, 15:35Чем Вы предлагаете заменить конструкцию?
On Error GoTo ...
Это из другой оперы. Совсем. Называется "обработка исключительных ситуаций" и к "вредному GoTo" -- на котором лихо переходами вверх/вниз закручивается логика исполнения (потому, что раньше Бейсик был такой, других средств не было почти) отношения не имеет.

Пример "вредного GoTo" -- это когда вместо

If (условие 1) Then
  набор операторов 1
Else If (условие 2)
  набор операторов 2
Else
  набор операторов 3
End If

приходилось делать

10 IF NOT (условие 1) THEN GOTO 100
20 набор операторов 1
90 GOTO 400
100 IF NOT (условие 2) THEN GOTO 200
110 набор операторов 2
190 GOTO 400
200 набор операторов 3
400 REM продолжаем

а потом это читать и отлаживать... Разбавляем нетривиальными "набор операторов х" по той же схеме -- кушать подано.
Автору на яд. Поддержать форум.

ape

A GoSub - Return работает?

bormant

Работает ;-), камни прячем...

Sub Main
  GoTo done
cnt:
  Print "Welcome!"
  GoSub Bye
  Exit Sub
done:
  GoTo cnt
bye:
  Print "Hi from gosub!"
  Return
End Sub
Автору на яд. Поддержать форум.

convas

#5
GoTo ... - оператор "безусловного" перехода по указанному далее адресу.

И вполне может использоваться при необходимости.


Но интересуют примеры ошибок при его использовании.

bormant

Да, примеры ошибок нужны, без этого тема скатилась в оффтопик.

Большая просьба к модераторам, если подробности про ошибки будут предоставлены и тема сможет вернуться в техническое русло, флейм про вредный Goto отрезать в отдельную тему или в корзину.
Автору на яд. Поддержать форум.

JohnSUN

Пока этот кусок темы не ушёл в корзину и я пять копеек, можно?..

Я очень тоскую по вычисляемому GOTO, с его помощью записывались аналоги Choice (Select)... Бывает, увлечешься перечислением через ElseIf возможных вариантов, ожидая, что их будет три-четыре, а потом и прочитать один этот If не получается - на экране не помещается. Видали как в кириллик-тулзе подстановка отдельных цифр сделана?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

bormant

Возможно Select Case -- это то что нужно ?
Автору на яд. Поддержать форум.

JohnSUN

Точно! И для каждого Case - свой GOTO!  ;D
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Syzygy

Когда ещё программировал, иногда использовал GoTo. В некоторых случаях было гораздо удобнее, чем воротить кучу конструкций и циклов. За это меня ругали, а иногда даже били и таскали по парт-собраниям ;D
A Matter of Life and Death

JohnSUN

Да, корифеи дружно доказали, что без GOTO можно обойтись. Им это было по-приколу.
Потом, кто-то высказал мысль, что раз можно обойтись, то нужно обходиться. (Где-то я недавно что-то очень похожее видел...) Дальше - больше... Обязаны обходиться!
Помню, мой шеф в качестве контраргумента показывал всем классический текст быстрого преобразования Фурье на Фортране. "Смотрите! Всего-то 33 оператора! Из них три - объявление процедуры, RETURN и END - можно не считать, к алгоритму не относятся. Осталось тридцать. Их них три - GO TO: два условных и один безусловный. Итого программа на 10% состоит из GO TO! Любая попытка переписать программу без них приводит к увеличению объема кода как минимум на три четверти. Хотите писать больше - ваше дело! А у меня на эти глупости времени нет..."
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

prof-alex

Нечитаемым код можно сделать и без goto. Но goto не делает код понятнее.

Как мат в речи.

«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра

dr.Faust

Цитата: convas от 25 января 2011, 15:35Чем Вы предлагаете заменить конструкцию?On Error GoTo
Никакого отношения к GoTo не имеет.

Цитата: ape от 25 января 2011, 16:05A GoSub - Return работает?
И опять никакого отношения к GoTo - это просто такой вызов функции.


Цитата: JohnSUN от 25 января 2011, 20:33Да, корифеи дружно доказали, что без GOTO можно обойтись.
Не всегда.
Вот например, выкинуть из OOoBasic For и Do и никак цикл без GoTo не сделаешь (ну ладно, ладно - цикл длиннее Integer не сделаешь).


Цитата: JohnSUN от 25 января 2011, 20:33Помню, мой шеф в качестве контраргумента показывал всем классический текст быстрого преобразования Фурье на Фортране. "Смотрите! Всего-то 33 оператора!
Кошмар...
В R одна строка )))

Цитата: prof-alex
«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра
Это как раз по поводу GOTO, если мне память не изменяет.
И как раз он кажется и придумал, то как плох GOTO.
Свобода информации - свобода личности!

VlhOwn

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

Мне же - в силу возраста - довелось разбираться с программами, написанными на самых различных ассемблерах, фортране, алголе-60 и т.п. И неприятие GOTO я вырабатывал не только и не столько из книжек и статей Дийкстры, сколько ползая на четвереньках по расстеленной в коридоре родного ВЦ многометровой распечатке. Я не люблю GOTO не умозрительно, я его коленками не люблю!

Заодно отвечу и про 33 оператора.
В 1990 году мне довелось беседовать с одним американским менеджером, уговаривавшим меня ехать к нему работать программером. В силу ряда причин ехать я не хотел, и предлагал ему альтернативный вариант - он мне покупает персоналку (тогда это было неподъёмно дорого для советского научного сотрудника), выполняю работу дома, а в Штаты езжу сдавать работу по мере готовности. Ему, американцу, все это вставало существенно дешевле, чем если бы я работал в Штатах.
Он тогда сказал мне: "Вы, русские, - гениальные программеры, ваши программы лаконичны и эффективны. Но живут они ровно столько, сколько вы их сопровождаете. Ни один, самый лучший мой сотрудник не в состоянии прочитать ваш код. Более того, вы сами не в состоянии прочитать свой код, написанный полгода назад. Мне это не подходит. Когда ты будешь работать у меня в фирме, тебе не позволят писать как бог на душу положит, весь код будет подробно документирован, будут тщательно расписаны все алгоритмы, все интерфейсы и взаимосвязи и т.д. и т.п. Вы, русские, этого делать не умеете. Если ты будешь работать у меня, я тебя это делать заставлю. Если ты будешь работать дома, то я просто выброшу деньги на ветер."

Я эту байку рассказал к тому, что "читабельная" программа ценнее "нечитабельной лаконичной", "алгоритмически прозрачная" ценнее "более эффективной, но запутанной". Когда речь идет о 30 строчках кода, эти ценности ничтожны. Когда о десятках тысяч - громадны.