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

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

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

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

Сообщение Mikhail » 24.11.2020 11:42:29

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

Нет, гугли дальше, мы в тебя верим! :D
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

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

Сообщение Seenkao » 24.11.2020 12:19:59

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

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

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

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

Сообщение zub » 03.12.2020 21:50:25

zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Seenkao » 03.12.2020 22:21:24

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

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

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

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

А вы хотите добавить ещё одну подобную ошибку, своими действиями.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение zub » 04.12.2020 00:06:10

Если ты пишешь программу "нетривиально" - будь готов отлаживать ее тоже "нетривиально"
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Seenkao » 05.12.2020 02:48:45

zub, вам нужна среда программирования для программистов или для всех подряд? Если вас не устраивают данные средства программирования, то почему бы вам не воспользоваться теми средствами, которые более высокого уровня и где нет GoTo?
В этой среде программирования вы ни как не избавитесь от Goto, а при попытке выпилить из среды, вы получите множество сломанного кода, который надо будет перебирать, точно так же полностью перебирая FPC и Lazarus с абсолютного нуля, потому что это в первую очередь коснётся именно оболочек, которые компилируют сами себя.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение zub » 05.12.2020 08:47:13

Я не программист и lazarus\fpc меня всем устраивают.
От гото я избавляться не собираюсь - просто отдавайте себе отчет что юзать гото не совсем правильно, да он может сэкономить 1-2 строчки кода, но всегда можно обойтись без него - будет надежнее.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Seenkao » 05.12.2020 09:43:50

zub писал(а):но всегда можно обойтись без него - будет надежнее.
почему вы за меня это решили? Если я его использую, значит я знаю что делаю?!
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение zub » 05.12.2020 11:47:23

>>Если я его использую, значит я знаю что делаю?!
надеюсь
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Mikhail » 05.12.2020 11:48:39

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

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

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

Сообщение Сквозняк » 05.12.2020 16:14:18

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


Не будет надёжнее, потому что сложная логика в переключателях сломается. Придётся заменять её на такую, которую сложнее тестировать и больше сделаешь ошибок. С гото можно апгрейдить программу с минимальными усилиями, а без него нужно каждый раз ломать уже протестированный блок и собирать его заново рискуя сделать новую ошибку.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение runewalsh » 06.12.2020 13:41:32

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

Хоспаде, да какая у тебя там сложная логика? На 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 проще, чем с таким «паттерном „состояние“» (или как это называется).
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение Seenkao » 06.12.2020 14:02:20

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

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

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

Я бы с интересом посмотрел пример, как в классах это делается!
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение zub » 06.12.2020 14:07:42

>>з управляющих конструкций языка и столкнулся с проблемой, как выйти из кучи вложенных ифов
Спасибо, а я еще думаю че за сложную логику тут втирают готошники... Понятно, парни любители все захардкодить))
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение runewalsh » 06.12.2020 14:39:14

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

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

Пред.След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru