У нас есть ситуация, когда разработчикам, работающим над устаревшей (основной) системой, оказывают давление на использование операторов GOTO при добавлении новых функций в существующий код, который уже заражен спагетти-кодом.
Теперь я понимаю, что могут быть аргументы в пользу использования "всего лишь одного маленького GOTO" вместо того, чтобы тратить время на рефакторинг на более удобное решение. Проблема в том, что этот изолированный "только один маленький ГОТО" не настолько изолирован. По крайней мере, раз в неделю или около того появляется новый "один маленький GOTO" для добавления. Эта кодовая база уже является ужасом для работы из-за кода, относящегося к или до 1984 года, который пронизан GOTO, который сделал бы много Pastafarians, полагая, что это вдохновленный самим Flying Spaghetti Monster.
К сожалению, язык, на котором он написан, не имеет готовых инструментов рефакторинга, поэтому он затрудняет продвижение "Refactor для повышения производительности позже", потому что кратковременные победы являются единственными выигрышами, которые здесь уделили внимание..
Кто-нибудь еще испытал эту проблему, когда все согласны с тем, что мы не можем добавлять новые GOTO, чтобы перевести 2000 строк в случайный раздел, но постоянно ли Anaylsts настаивают на том, чтобы делать это только один раз, и одобрение руководства?
TL;DR;
Как можно решить проблему, когда разработчики вынуждены постоянно добавлять заявления GOTO (добавив, я имею в виду добавить, чтобы перейти к случайным разделам на многие строки), потому что он "быстрее выполняет эту функцию"?
Я начинаю опасаться, что мы потеряем ценных разработчиков у хищников над этим...
Разъяснение:
Перейти к here
alsoThere:
Нет, я говорю о виде goto, который перескакивает 1000 строк из одной подпрограммы в другую в середине цикла. Перейти к somewhereClose
there:
Я даже не говорил о том, какие gotos вы можете разумно прочитать и определить, что делает программа. Перейти к alsoThere
somewhereClose:
Это тот код, который делает фрикадельки midpoint:
Если первый раз здесь Goto nextpoint
detail:
(каждый из них почти полностью отличается) Перейти к pointlessReturn
here:
В этом вопросе я не говорил о том, что иногда можно использовать goto. Перейти к there
tacoBell:
, и он только что вернулся к чертежной доске. Перейти к Jail
elsewhere:
Когда требуется неделя аналитиков, чтобы дешифровать то, что программа делает каждый раз, когда она затрагивается, что-то глубоко не соответствует вашей кодовой базе. На самом деле, я на самом деле до моего hell:
, если не обновленный goto 4
, выдача спецификации goto detail
pointlessReturn:
goto tacoBell
Jail:
Собственно, просто небольшое обновление с небольшой победой. Я потратил 4 часа на рефакторинг части этой конкретной программы на единую метку за раз, сохраняя каждую итерацию в svn по мере того, как я шел. Каждый шаг (около 20 из них) был небольшим, логичным и достаточно легким, чтобы перейти bypass
nextpoint:
спонтанно выскочить из вашей еды и на экран через какой-то странный вид магнетизма из спагетти-фрикадельки. Перейти к elseWhere
bypass:
разумно проверить, что он не должен вводить какие-либо логические изменения. Используя эту новую, более читаемую версию, я сел с аналитиком и выполнил почти все эти изменения сейчас. Перейти к end
4:
first *, если первый раз здесь goto hell
, не второй, если первый раз здесь goto hell
, нет третьего, если первый раз здесь goto hell
четвертый теперь обновленный goto hell
end: