Страница 1 из 1

Замена меток

СообщениеДобавлено: 07.01.2013 19:50:09
Mikhail235
О том, что метки и, естественно goto плохое решение знают все.
Но вот столкнулся с проблемой, с которой, я уверен, сталкивается большинство:
Вводим какое-то значение, затем проверяем его и в зависимости от правильности либо продолжаем работу, либо возвращаемся с указаниями на повторение ввода. Так вот этот возврат у меня осуществляется через goto, а как решают эту проблему профессионалы.
Спасибо

Re: Замена меток

СообщениеДобавлено: 07.01.2013 19:55:57
bormant
Код: Выделить всё
repeat
  write('Введите ...: ') readln(data);
  if IsValid(data) then break
  else writeln('*** ошибка ... Повторите ввод.');
until false;

Re: Замена меток

СообщениеДобавлено: 07.01.2013 20:07:16
NTFS
Чисто OFF: В самом GoTo нет ничего плохого... профессионал не колеблясь поставит его там, где это упросит код, а ортодокс будет размазывать флаги и постусловия.

Добавлено спустя 1 минуту 2 секунды:
Классический пример - прерывание двойного цикла. Кто скажет, что никогда не ставил там GoTo - пусть бросит в меня камень.

Re: Замена меток

СообщениеДобавлено: 07.01.2013 20:19:54
Mikhail235
Спасибо, все получилось. В своих рассуждениях не учел break

Re: Замена меток

СообщениеДобавлено: 07.01.2013 22:03:29
stikriz
NTFS писал(а):Классический пример - прерывание двойного цикла.

У ортодокса есть один метод - raise и потом анализ типа исключения. Если подходить филосовски, то и Continue и Exit - это goto.

Re: Замена меток

СообщениеДобавлено: 07.01.2013 22:33:41
Brainenjii
где б взять камень :-D

Re: Замена меток

СообщениеДобавлено: 07.01.2013 22:49:33
Padre_Mortius
Чисто OFF: В самом GoTo нет ничего плохого... профессионал не колеблясь поставит его там, где это упросит код, а ортодокс будет размазывать флаги и постусловия.

ага... просто иногда хочется за такие упрощения с goto просто медленно убивать медленно. В 99,5% случаев в pascal можно обойтись без меток. Оставлю 0,5% случаев на редкие извращения.