Другие языки программирования и технологии

почему наличие команд GOTO свидетельствует о низкой квалификации программиста?

Такой код невозможно поддерживать, следовательно, такой программист не может работать в команде либо создавать коммерческие программы.
А как еще назвать "специалиста" который больше не может, чем может?
Неизвестно Неизвестно
Неизвестно Неизвестно
11 765
Лучший ответ
Существуют разные сообщества которые против использование GOTO, якобы программирование с GOTO считается непонятным и сложным.
Максим Середа
Максим Середа
2 193
Потому что грамотнее решать задачи с использованием рекурсивных алгоритмов. Кроме того, этот оператор реализует переход на метку, а метка всегда привязана к строке в модуле файла, но не к процедуре или функции, в силу чего администрирование и развитие программы очень затруднено.
Viktor Ivanchenko
Viktor Ivanchenko
1 368
С ментками всегда много хлопот=))) Мне показывали код, написанный одним индийцем (а оплата у них на фирме в зависимости от количества строчек в коде программы) , так там в каждой пятой строчке была метка!!!! Моему знакомому было намного проще переписать эту прогу, чем разбираться в ней=(((
Считается, что если можно избегать меток, лучше их не использовать, другое дело, что есть такия языки, в которых без них... туговато приходится.... =)))
Смотря где. есть архитектуры, где без GOTO не обойтись, на x86 (amd64) они вредны вот почиму:

Когда мы пишем
int foo(int a)
{
int b = a+2;
return b;
}
...

int a = foo(123);
В машшинном коде это выглядит как:
push 0x7b ; 123 в стек
call 0x00....; Адрес начала foo

foo в начале разварачивает стек.

А если перед int b = a+2; будет метка, и ты по ней перейдеш, что будет в "a"?
+ ко всему при каждом call'е в стек кладетса адрес возврата.
Такие программы очень тяжело отлаживать
Все выше сказаное имеет свой смысл.
Тока есть один случай при котором GOTO оправдывается даже опытными программистами - быстрый выход из дво или более вложенных циклов!! !
Также GOTO неявно применяется для структуры
switch (){ case: breake;} //синтаксис c++
я вообще ни разу их не использовал.. . мне кажется, что они и вовсе не нужны..
Потому что команда GOTO очень путает код, его читабельность и если не ошибаюсь достаточно сильно затрачивает процессорное время в сравнениями с иными способами организации циклов.