(решено) GoTo или repeat until?
 Добавлено: 31.08.2015 20:45:23
Добавлено: 31.08.2015 20:45:23Всем привет и хорошего настроения!
Правила:
1) Если Ваш ответ, примерно: "это просто плохо и неграмотно, и все тут!", то Ваш ответ априори не интересен.
2) Если Ваш ответ, примерно: "это просто неудобно читаемый код и неграмотно, и все тут!", то Ваш ответ априори не интересен.
3) Если Вы можете доказать, что при общении с железом оператор GoTo <== может вызвать реальные сбои, Ваш ответ востребован!
4) Если Вы можете доказать, что при переводе в машинный код оператор GoTo <== может вызвать реальные сбои, Ваш ответ востребован!
5) В общем нужно реальное доказательство, того почему GoTo <= так невзлюбили программисты и почему оно считается плохим тоном?
Пример №1 с Goto
Теперь пример №2 без GoTo:
На мой взгляд разницы нет, разве что в первом варианте Goto, а во втором вложенный цикл (на скорость я это не тестировал).
Вопрос: Использование GoTo действительно очень плохо для программы?
 Использование GoTo действительно очень плохо для программы?
.
			Правила:
1) Если Ваш ответ, примерно: "это просто плохо и неграмотно, и все тут!", то Ваш ответ априори не интересен.
2) Если Ваш ответ, примерно: "это просто неудобно читаемый код и неграмотно, и все тут!", то Ваш ответ априори не интересен.
3) Если Вы можете доказать, что при общении с железом оператор GoTo <== может вызвать реальные сбои, Ваш ответ востребован!
4) Если Вы можете доказать, что при переводе в машинный код оператор GoTo <== может вызвать реальные сбои, Ваш ответ востребован!
5) В общем нужно реальное доказательство, того почему GoTo <= так невзлюбили программисты и почему оно считается плохим тоном?
Пример №1 с Goto
- Код: Выделить всё
 labelGoTo1:
 а := 'Задаётся заново только для labelGoTo1';
 b := 'Задаётся заново только для labelGoTo1';
 c := 'Задаётся заново только для labelGoTo1';
 d := 'Задаётся заново только для labelGoTo1';
 e := 'Задаётся заново только для labelGoTo1';
 
 labelGoTo2:
 f := 'Одинаковое для labelGoTo1 и labelGoTo2';
 g := 'Одинаковое для labelGoTo1 и labelGoTo2';
 k := 'Одинаковое для labelGoTo1 и labelGoTo2';
 repeat
 ...
 test := functionTest(a,b,c,d,e,f,g,k);
 if buttonExit = true then exit;
 ProcessMessages;
 until someGlobalBoolean = true;
 if test = 1
 then GoTo labelGoTo1
 else GoTo labelGoTo2;
Теперь пример №2 без GoTo:
- Код: Выделить всё
 repeat
 
 if test = 1 then
 begin
 а := 'Задаётся заново только для labelGoTo1';
 b := 'Задаётся заново только для labelGoTo1';
 c := 'Задаётся заново только для labelGoTo1';
 d := 'Задаётся заново только для labelGoTo1';
 e := 'Задаётся заново только для labelGoTo1';
 end;
 f := 'Одинаковое для labelGoTo1 и labelGoTo2';
 g := 'Одинаковое для labelGoTo1 и labelGoTo2';
 k := 'Одинаковое для labelGoTo1 и labelGoTo2';
 repeat
 ...
 test := functionTest(a,b,c,d,e,f,g,k);
 if buttonExit = true then exit;
 ProcessMessages;
 until someGlobalBoolean = true;
 until buttonExit = true;
На мой взгляд разницы нет, разве что в первом варианте Goto, а во втором вложенный цикл (на скорость я это не тестировал).
Вопрос:
 Использование GoTo действительно очень плохо для программы?
 Использование GoTo действительно очень плохо для программы?.
 приведенный пример, какой-то он куцый, но по факту, блоки "labelGoTo1:" и "labelGoTo12:" можно оформить процедурами и вызывать уже их... без всяких прыжков по goto )
  приведенный пример, какой-то он куцый, но по факту, блоки "labelGoTo1:" и "labelGoTo12:" можно оформить процедурами и вызывать уже их... без всяких прыжков по goto )