В академическом программировании очень не любят инструкцию "goto ..." (переход к выполнению указанного участка кода). Отчасти это правильно, потому как её использование может сделать код сложным для восприятия и отладки (что могу подтвердить, так как лично видел и отлаживал подобный код). Зато очень любят конструкцию do ... while (цикл с выходом по условию) и ещё больше for ... (цикл с выходом по условию и итератором). Так вот, автор намекает, что в основе этих конструкций лежит всё тот-же нелюбимый всеми goto, что, в принципе, так и есть. Вот только они облекают goto в такую форму, что даже самый опытный программист не сможет запутать ими код до степени тарелки со спагетти.
что даже самый опытный программист не сможет запутать ими код до степени тарелки со спагетти
ИЗИ. Надо просто представить control flow в явном виде.
Имелось в виду непреднамеренно. Преднамеренно - это уже обфускация, но, подозреваю, что даже там есть способы запутать код получше, чем навтыкать груду goto.
Нахуя?
switch (next_command) {
case 0: ... DoNextCommand(1); break;
case 1: ... DoNextCommand(2); break;
case 2: DoNextCommand(10); break; // why would you need goto?
....
}
Что именно нахуя? Мне говорят, что с циклами не сделать такой спагетти-код, как с goto, я показываю, как реализовать goto, и, соответственно, сделать такой же спагетти-код.
google SQL-инъекции (лучше проконсультируйся у специалистов)
воспользоваться уязвимостями(фичами) языка
к примеру ассемблерные вставки опкодов по адресу в память (к примеру в паскале (старом) написать редактор со сдвигом на следующую строку и интерпретировать напечатанный текст из видеобуфера)
когда у тебя в браузере вкладки зависают из за утечек памяти
неправильная обработка исключений (когда то win уходила в экран смерти при обрыве модемного соединения - из за корявых драйверов для модема)
Если используешь GOTO - ты не тру программер, тру программеры используют только условные операторы.
Более того: GoTo (безусловный переход), IF (условие) и = (присвоение) являются тремя фундаментальными операторами практически любого языка программирования. А цикл - это всего лишь внебрачный результат порочной связи goto и if ))
Я бы не сказал, что GoTo является фундаментальным оператором любого языка программирования. Для известных мне высокоуровневых языков я пожалуй даже не вспомню как он пишется.
А в ассемблере нет if в чистом виде. Есть условный и безусловный переходы. И if на языке высокого уровня транслируется в комбинацию из комманд вычисления условия и условного перехода.
Ну не знаю, на программерских форумах за GOTO и убить могут. :-)
А если серъезно - нет таких ситуаций, где GOTO реально нужен. Если мы конечно говорим не о Бейсике под MS-DOS 3.30
<сарказм>Тру программеры не используют условные операторы, они используют полиморфизм.</сарказм>
IT-юмор
5.6K поста52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору