У нас есть ситуация, когда разработчики, работающие над устаревшей (базовой) системой, вынуждены использовать операторы GOTO при добавлении новых функций в существующий код, который уже заражен спагетти-кодом.
Теперь я понимаю, что могут быть аргументы в пользу использования «всего лишь одного маленького GOTO» вместо того, чтобы тратить время на рефакторинг до более удобного в обслуживании решения. Проблема в том, что этот изолированный «только один маленький GOTO» не так изолирован. По крайней мере, раз в неделю или около того нужно добавить новый «один маленький GOTO». С этой кодовой базой уже ужасно работать из-за того, что код, датируемый 1984 годом или ранее, был пронизан GOTO, что сделало бы многие Пастафари считают, что его вдохновил сам Летающий спагетти-монстр.
К сожалению, на языке, на котором это написано, нет готовых инструментов рефакторинга, поэтому становится сложнее продвигать «Рефакторинг для повышения продуктивности позже», потому что краткосрочные победы - единственные победы, на которые здесь обращено внимание ...
Кто-нибудь еще сталкивался с этой проблемой, когда все соглашаются с тем, что мы не можем добавлять новые GOTO для перехода на 2000 строк в случайный раздел, но аналитики постоянно настаивают на том, чтобы сделать это только один раз и получить одобрение руководства?
tldr;
Как можно решить проблему, когда разработчиков заставляют (заставляют) постоянно добавлять операторы GOTO (под словом «добавить» я имею в виду «добавить» для перехода к случайным разделам, находящимся на расстоянии многих строк), потому что он «получает эту функцию в быстрее?
Я начинаю опасаться, что из-за этого хищники могут потерять ценных разработчиков ...
Уточнение:
Перейти here
alsoThere:
Нет, я говорю о типе goto, который переводит 1000 строк из одной подпрограммы в другую на середине цикла while. Перейти somewhereClose
there:
Я даже не говорил о типах gotos, которые можно разумно прочитать и определить, что делает программа. Перейти alsoThere
somewhereClose:
Это своего рода код, который делает фрикадельки midpoint:
Если здесь впервые, Goto nextpoint
detail:
(каждый почти полностью отличается) Goto pointlessReturn
here:
В этом вопросе я не говорил о иногда допустимом использовании goto. Перейти there
tacoBell:
, и он только что вернулся к чертежной доске. Перейти Jail
elsewhere:
Когда аналитикам требуются недели, чтобы расшифровать, что программа делает каждый раз, когда к ней прикасаются, что-то глубоко не так с вашей кодовой базой. Фактически, я на самом деле до моего hell:
если не обновленного goto 4
представления спецификации goto detail
pointlessReturn:
goto tacoBell
Jail:
Собственно просто небольшое обновление с маленькой победой. Я потратил 4 часа на рефакторинг части этой конкретной программы, по одной метке за раз, сохраняя каждую итерацию в svn по ходу. Каждый шаг (около 20 из них) был небольшим, логичным и достаточно простым, чтобы goto bypass
nextpoint:
спонтанно выпрыгивал из еды и попадал на экран через какой-то странный магнетизм спагетти-фрикаделек. Перейти elseWhere
bypass:
убедитесь, что он не должен вносить никаких изменений в логику. Используя эту новую, более читаемую версию, я сел с аналитиком и завершил почти все это изменение. Перейти end
4:
первый * если первый раз здесь goto hell
, нет второго если первый раз здесь goto hell
, нет третьего если первый раз здесь goto hell
четвертый сейчас до- дата перехода hell
end:
goto
. Но он не из их числа. - person pyon   schedule 28.02.2011