goto - с любимыми не расставайтесь, или break не тащит

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Ответить
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Seenkao писал(а):Говнокод - это любой код, который тебе не понятен

Нет, гугли дальше, мы в тебя верим! :D
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

Mikhail,
Seenkao писал(а):где-то там, Снег-север скидывал ссылку, но кто-то ведь уже перечитал весь топик?

ещё один "читатель".
мимо_проходил писал(а):Ещё один альтернативно одарённый?
точнее по делу больше нет аргументов? Даже ссылки на свои "якобы писанные" посты, почему-то ни к чему конкретному не привели.

Добавлено спустя 8 минут 14 секунд:
один и тот же человек? Решил раскрыть покровы?
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

А кто вам сказал, что нельзя допускать Goto внутрь цикла? Вы так же должны учитывать специфику программы, своими "ограничениями" вы заставляете других делать грабли, для обхода ваших ограничений.

Хотите знать к чему приводят подобные ограничения? Я компилирую программу, запускаю её и всё работает хорошо. Решаю отладить эту программу. Включаю дебаггер, запускаю, программа запускается и в какой-то момент вылазит ошибка RunError 201 - и вполне возможно, ошибка далеко не там, где дебаггер остановился. От чего появилась эта ошибка, тоже приходится догадываться, потому что ни компилятор ни дебаггер ни каких конкретных ошибок не выдают.

Обращался, как я понимаю, к разработчикам, в ответ: "Так и должно быть". Искать чего они там намудрили и не правильно сделали, они не собираются. И это я только одну маленькую ошибку нашёл, а наверняка там их тонны.

Суть самой проблемы в том, что отладчик добавляет свой код в исполняемый. А этот код не всегда корректный.

А вы хотите добавить ещё одну подобную ошибку, своими действиями.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Если ты пишешь программу "нетривиально" - будь готов отлаживать ее тоже "нетривиально"
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

zub, вам нужна среда программирования для программистов или для всех подряд? Если вас не устраивают данные средства программирования, то почему бы вам не воспользоваться теми средствами, которые более высокого уровня и где нет GoTo?
В этой среде программирования вы ни как не избавитесь от Goto, а при попытке выпилить из среды, вы получите множество сломанного кода, который надо будет перебирать, точно так же полностью перебирая FPC и Lazarus с абсолютного нуля, потому что это в первую очередь коснётся именно оболочек, которые компилируют сами себя.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Я не программист и lazarus\fpc меня всем устраивают.
От гото я избавляться не собираюсь - просто отдавайте себе отчет что юзать гото не совсем правильно, да он может сэкономить 1-2 строчки кода, но всегда можно обойтись без него - будет надежнее.
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

zub писал(а):но всегда можно обойтись без него - будет надежнее.
почему вы за меня это решили? Если я его использую, значит я знаю что делаю?!
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>Если я его использую, значит я знаю что делаю?!
надеюсь
Mikhail
энтузиаст
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Сообщение Mikhail »

Seenkao писал(а):почему вы за меня это решили? Если я его использую, значит я знаю что делаю?!

Очень в этом сомневаюсь. :(
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

zub писал(а):да он может сэкономить 1-2 строчки кода, но всегда можно обойтись без него - будет надежнее.


Не будет надёжнее, потому что сложная логика в переключателях сломается. Придётся заменять её на такую, которую сложнее тестировать и больше сделаешь ошибок. С гото можно апгрейдить программу с минимальными усилиями, а без него нужно каждый раз ломать уже протестированный блок и собирать его заново рискуя сделать новую ошибку.
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Сквозняк писал(а):сложная логика

Хоспаде, да какая у тебя там сложная логика? На goto пишут те, кто ничего другого не знает, и получается чушь. Например, я недавно видел челика, который пытался сделать текстовый квест на спагетти из управляющих конструкций языка и столкнулся с проблемой, как выйти из кучи вложенных ифов, чтобы, например, пройдя из комнаты A в комнату B, а затем в комнату C, вернуться из C в A. Ты, конечно, сделаешь через goto, но на самом деле это делается как

Код: Выделить всё

type
   TScene = class ... end;
   RoomA = class(TScene) ... end;
   RoomB = class(TScene) ... end;
   RoomC = class(TScene) ... end;

   TGame = class
      scene: TScene;
   end;

var
   game: TGame;

while not game.Finished do
begin
   game.scene.Draw;
   readln(cmd);
   game.scene.HandleCommand(cmd);
end;

Тогда переход между комнатами вместо вложенных ифов/гото/прочей дичи выражается в смене game.scene.
Давай сюда пример, где с goto проще, чем с таким «паттерном „состояние“» (или как это называется).
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

runewalsh писал(а):while not game.Finished do

С каких пор "конец" комнаты - это смена комнаты?

В твоём варианте, с помощью Goto, вообще в любой конец любой комнаты можно попасть, причём увеличится код только за счёт переходов. Которые так же можно сократить, указав любую комнату ссылкой и по GoTo переходить по данной ссылке, засунув список всех комнат в массив или ещё куда.

Я бы с интересом посмотрел пример, как в классах это делается!
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>з управляющих конструкций языка и столкнулся с проблемой, как выйти из кучи вложенных ифов
Спасибо, а я еще думаю че за сложную логику тут втирают готошники... Понятно, парни любители все захардкодить))
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Seenkao писал(а):С каких пор "конец" комнаты - это смена комнаты?

Это не конец комнаты, это конец игры по некоторому условию.
Комната меняется в HandleCommand, например, RoomA.HandleCommand('вправо') меняет game.scene на RoomB, поэтому следующая итерация цикла будет работать уже с RoomB — нам нарисуется комната B и команды будут обрабатываться комнатой B. Тем самым по команде «вправо» мы перешли из комнаты A в комнату B.
Ответить