(решено) GoTo или repeat until?

Форум для изучающих FPC и их учителей.

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

Re: GoTo или repeat until?

Сообщение stanilar » 03.09.2015 02:11:12

Кроме задачи удобочитаемости кода, есть более важная задача - правка унаследованного кода. Внимание человека не любит, когда его отвлекают. Поэтому любые операторы, что могут прервать последовательность мысли, ухудшают возможности поддержки и сопровождения.

Хорошо, когда ты в одном лице и разработчик, и менеджер, и аналитик. Плохо, когда ты устроился на работу винтиком в огромный проект. Вот тогда то и становятся понятны все неприятности что с GOTO, что с EXIT, что c SendMessage.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: GoTo или repeat until?

Сообщение Лекс Айрин » 03.09.2015 09:28:15

vitaly_l писал(а):Важно понять цель АОП.


У меня есть мысль и я ее думаю (с). И для ее воплощения, имхо, АОП как раз подходит.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: GoTo или repeat until?

Сообщение vitaly_l » 03.09.2015 17:11:00

Pavia писал(а):плодить осмысленные имена трудновато.

Это и ненужно, я привык анализировать код без подсказок (WEB, там очень редко сохраняют комментарии, т.к. экономят трафик)
Лекс Айрин писал(а):У меня есть мысль

Рекомендую её записать, иначе она может "сбежать", при переключении внимания. см. дальше:
stanilar писал(а):Внимание человека не любит, когда его отвлекают. Поэтому любые операторы, что могут прервать последовательность мысли, ухудшают возможности поддержки и сопровождения.

Это как с рифмой. Однако у каждого свой такт и своё видение последовательности мысли. Примеры выше и выше сказанное - этому подтверждение. Я здесь отлавливаю принципы. То, на что программисты смотрят в первую очередь? что для программистов важно? По сути я учусь не читать код, а чувствовать и видеть его. Т.к. читать ОБА приведённых примера - гипер сложно с первого раза. Но когда начинаешь чувствовать и видеть... всё становиться на свои места... И должен заметить в этом топике у меня богатейший улов! Несколько операторов, про которые я забыл (хотя обожаю их в других языках). Целевые различные, полезные: плюшечки, печеньки и орешки и т.д.

Или например вот такие, что был понятен ход моих странных изысканий:
скалогрыз писал(а):Потому что в начале процедуры, принято проводить проверку входных параметров на правильность

На PHP или JS - для меня это стандарт. Я там проверяю эти данные автоматом и всегда в начале. Но я не знал и даже предположить не мог, что на это обязательно нужно обращать внимание. И вот такие плюшечки и печеньки с орешками я и собираю, потому, что мне их взять негде ( у меня другое образование ) :? . Правда иногда вместо печенек сыплются шишки... но я привык... :cry: пою песенку про "плюшевого мишутку" и все шишки сразу теряются.

Спасибо, всем! Всё очень доступно и понятно. Правда, отличается от моей логики, и к такой стилистике мне нужно привыкать, с первого раза было тяжело понять, но потом когда вникаешь, зачем и для чего, то понимаешь что, да... и в общем-то нагрузка такая-же, а вот надёжность повышается... С читабельностью, по началу, можно поспорить, но как только понимаешь принцип... то, всё становиться на свои места. я попробую подключить все: плюшечки и печеньки и орешки!

:roll: БОЛЬШУЩЕЕ ВСЕМ СПАСИБО! :roll:

Художники, посовещались и решили признать всех программистов правыми!
холивар - безусловно остаётся в силе! Любой вправе оспорить решение художников в Кассации у художников!


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: GoTo или repeat until?

Сообщение Лекс Айрин » 03.09.2015 18:17:10

vitaly_l писал(а):Рекомендую её записать, иначе она может "сбежать",


Я ее записал.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: GoTo или repeat until?

Сообщение stanilar » 03.09.2015 19:44:27

vitaly_l писал(а):Однако у каждого свой такт и своё видение последовательности мысли.


Последовательности не та категория, что подразумевает разное видение. Последовательность или есть, или нет.

З.Ы. Раз уж Вам так интересны холивары, попробуйте потролить на тему необходимости собирать все объявления переменных в одном месте.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: GoTo или repeat until?

Сообщение vitaly_l » 03.09.2015 20:06:57

stanilar писал(а):Последовательность или есть, или нет.

Мозг несколько иначе работает. Мысль - это не верёвочка и не ниточка. А я говорю про последовательность мысли, а не про последовательность исполнения кода программы. Но Вы этого не заметили, т.к. у Вас изначально другая целевая функция была. Теперь посмотрите, выше на текст, который Вы скопировали, я его изменить не мог, т.к. нужно взламывать сервер, а это мне сложно... Будете оспаривать, что в моей фразе, есть слово: "мысли"? Или признаете что я был прав? Или можете оспорить работу мозга?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: GoTo или repeat until?

Сообщение stanilar » 04.09.2015 00:23:20

vitaly_l писал(а): Будете оспаривать, что в моей фразе, есть слово: "мысли"?


Нет. Надеюсь, Вы тоже не будете оспаривать то, что понятие "последовательность" одинаково и для мысли, и для кода?
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: GoTo или repeat until?

Сообщение vitaly_l » 04.09.2015 00:44:55

stanilar писал(а):Надеюсь, Вы тоже не будете оспаривать то, что понятие "последовательность" одинаково и для мысли, и для кода?

Акцентирую: видение последовательности мысли, у нас с Вами разное. Именно поэтому мы с Вами в совершенно одинаковом предложении - увидели разное. Именно это и сказано в моей фразе, которую Вы скопировали выше (Я её писал для Лекс Айрин т.к. он хочет создать АОП). Прочитайте внимательно ту фразу, а потом свою и поймёте. А вот в программном коде последовательность была бы 100% совпадающей, независимо от того, кто её читал-бы. "Исключительно", только для программного кода, сказанное Вами верно, про: Последовательность не та категория, что подразумевает разное видение. <= Так понимаете? Как смог я вроде описал, если не согласны, то мне всё равно на этом Halt(), т.к. здесь обсуждался вопрос GoTo и Repeat Until и много людей отвечали и они возможно подписаны - они будут ругаться, если их будут дёргать. Хорошего всем настроения и ещё раз спасибо!
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: (решено) GoTo или repeat until?

Сообщение mishastik » 04.09.2015 13:54:19

vitaly_l писал(а):С моей колокольни, вопрос целесообразности - применяется к каждому оператору, где-то удобнее читается: for, где-то while, где-то repeat, а где-то GoTo...


все эти конструкции так или иначе строятся на основе гото (вернее асм инструкций jmp, goto, b... ). таким образом гото как бы инкапсулирован в этих конструкциях и скрыт с глаз программиста. Если писать на асме, то там да, сплошь и рядом надо использовать гото.

Добавлено спустя 1 минуту 23 секунды:
vitaly_l писал(а):В общем-то я пока не вижу предъявления реальных проблем с чтением кода, или его отладкой.
А альтернативная сторона приводит только зомбированные страшилки.
Счёт уже 7 : 0 в пользу использования оператора GoTo.


это не страшилки , а опыт многих людей. Если у вас его вероятно нет, то и спорить незачем.
mishastik
незнакомец
 
Сообщения: 5
Зарегистрирован: 29.07.2015 22:42:47

Re: (решено) GoTo или repeat until?

Сообщение Снег Север » 04.09.2015 16:01:10

Да всё очень просто - если в программе на языке высокого уровня, как Паскаль, приходится использовать явное goto, это значит, что логика программы ущербна. И ничего больше. Пример топикстартера с goto - такой наглядный пример, как не надо писать программный код.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3051
Зарегистрирован: 27.11.2007 16:14:47

Re: (решено) GoTo или repeat until?

Сообщение vitaly_l » 04.09.2015 17:20:08

Снег Север писал(а):Пример топикстартера с goto - такой наглядный пример, как не надо писать программный код.

Буря GoTo как мглою небо кроет,
Вихри снежные крутя;
То, как зверь, GoTo завоет,
То заплачет, как дитя,
То по кровле обветшалой
GoTo соломой зашумит,
То, как путник запоздалый,
GoTo в окошко застучит.

Наша ветхая с GoTo лачужка
И печальна и темна.
Что же ты, GoTo старушка,
Приумолкла у окна?
Или бури GoTo завываньем
Ты, мой друг, утомлена?
Или дремлешь под жужжаньем
GoTo веретена?
...

По существу, если хотите оспорить решения художников (о том что, программисты признаны правыми про GoTo), то нужно привести реальный аргумент. Привести АРГУМЕНТ, так как это честно делает скалогрыз и не только он, когда приводят примеры. Здесь (в холиваре художников) работают, только неоспоримые факты, такие как: [url]компилятор и try[/url]. Никакие намёки художники не понимают т.к. художники даже разницу в цвете не видят, т.к. любой цвет - это курпускулярный дуализм, а до взрыва вселенной не существовало.

при вышесказанном, вот это будет работать, хотя говорили что "так" нельзя:
Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i:integer;
  label labelRepeatTuda;
  label labelRepeatSuda;
  label labelInSenterRepeatTuda;
  label labelInSenterRepeatSuda;
begin
  i := 0;
  labelRepeatTuda:
       Application.processMessages;
       if buttonExit then begin SynEdit.text := s; exit; end;
       inc(i);
       if i>10 then GoTo labelInSenterRepeatSuda;
       s := s + ' туда: ' +IntToStr(i) + #13;
       labelInSenterRepeatTuda:
  GoTo labelRepeatTuda;

  labelRepeatSuda:
       Application.processMessages;
       if buttonExit then begin SynEdit.text := s; exit; end;
       dec(i);
       if i<1 then GoTo labelInSenterRepeatTuda;
       s := s + ' сюда: ' +IntToStr(i) + #13;
       labelInSenterRepeatSuda:
  GoTo labelRepeatSuda;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  buttonExit := true;
end;     



По циклам Вы так не поскачете, нужно будет создавать "сложные" процедуры и функции. Но ломать логику: высокого программирования - нельзя, поэтому GoTo - зло. Напомню, что у программистов, ещё есть: Кассационная инстанция и НаиВысший художественный холивар, но нужно приводить АРГУМЕНЫ, а не слова. Художники только: печеньки, орешки и плюшечки - могут рассмотреть (только они(плюшечки) востребованы). Всё остальное для художников - зомбированные страшилки.


.
Последний раз редактировалось vitaly_l 04.09.2015 17:40:37, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: (решено) GoTo или repeat until?

Сообщение vada » 04.09.2015 17:27:45

А что в паскале есть GOTO? Вот не знал! :roll:
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: (решено) GoTo или repeat until?

Сообщение vitaly_l » 04.09.2015 18:01:50

vada писал(а):А что в паскале есть GOTO? Вот не знал!


Ты жива еще, моя старушка?
Жив и GoTo. Привет тебе, привет!
Пусть струится над твоей избушкой
Тот вечерний несказанный свет.

Пишут мне, что ты, тая тревогу,
Загрустила шибко обо мне,
Что ты часто ходишь на дорогу
В старомодном ветхом шушуне
.

VADA - привет! (спасибо)
Скалогрыз привёл художникам аргумент: "По той же причине, что и в стихах, держится рифма." - оттуда и пошло.
Ответ здесь: http://www.freepascal.ru/forum/viewtopic.php?f=23&t=10487&p=88159#p88159


.
Последний раз редактировалось vitaly_l 04.09.2015 18:39:48, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: (решено) GoTo или repeat until?

Сообщение Снег Север » 04.09.2015 18:39:46

vitaly_l писал(а):при вышесказанном, вот это будет работать, хотя говорили что "так" нельзя

Понимаете, программист с опытом всегда придерживается двух основных принципов — 1) какой результат надо получить и 2) как этот результат получить наиболее экономными средствами.

Третий принцип — писать такой код, из которого цель была понятна даже тому, кто его увидит впервые.

Так вот, ваш код, похоже, был написан специально, чтобы никто, без поллитры, не понял бы, что он должен делать. После компиляции стало понятно, что единственная цель — выводить
набор строчек «туда»/«сюда» с отсчетом от 0 до 10 и обратно пока не нажата вторая кнопка. Должен признать, что если бы я специально стал придумывать более неудобный и нерациональный способ решения этой задачи, у меня превзойти вас бы не получилось. А вот как я бы решил аналогичную задачу, по минимуму:
Код: Выделить всё
procedure TForm1.Button3Click(Sender: TObject);
var
  i, count :integer;
begin
     Memo1.Clear;
     i := 0;
     count := 1;
     Memo1.Lines.BeginUpdate;
     while not buttonExit do
     begin
          if count>0 then
             Memo1.Lines.Add(Format('туда: %d',[i]))
          else
            Memo1.Lines.Add(Format('сюда: %d',[i]));
          Inc(i,count);
          if (i>10) or (i<0) then
          begin
             count := -count;
             Inc(i,count);
          end;
          Application.processMessages;
     end;
     Memo1.Lines.EndUpdate;
end;   
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3051
Зарегистрирован: 27.11.2007 16:14:47

Re: (решено) GoTo или repeat until?

Сообщение vitaly_l » 04.09.2015 18:45:47

Снег Север писал(а):Должен признать, что если бы я специально стал придумывать более неудобный и нерациональный способ решения этой задачи, у меня превзойти вас бы не получилось. А вот как я бы решил аналогичную задачу, по минимуму:

Суть в переходе из цикла в цикл, а не в выводе инфо. GoTo в моём примере прыгает из цикла в цикл...
Мой пример был вот для этого, там сказано для циклов это непредсказуемо: http://www.freepascal.org/docs-html/ref/refsu50.html#x146-15600013.1.3 Но если существует такая задача... И я понимаю, что: GoTo - безусловно не цикл.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru