我们的工作情况是,在已经感染了意大利面条代码的现有代码中添加新功能时,处理遗留(核心)系统的开发人员正在被迫使用GOTO语句.
现在,我明白可能存在使用"只需一个小GOTO"的论据,而不是花时间重构一个更易于维护的解决方案.问题是,这个孤立的"只有一点GOTO"并不是那么孤立.每周至少一次左右有一个新的"一点GOTO"要添加.由于代码可追溯到1984年或之前的GOTO,这使得许多Pastafarians认为它受到了Flying Spaghetti Monster本身的启发,因此这个代码库已经令人恐惧.
不幸的是,这里编写的语言没有任何现成的重构工具,因此更难以推动'Refactor以后提高生产力',因为短期胜利是这里唯一值得关注的胜利......
有没有其他人经历过这个问题,即每个人都同意我们不能添加新的GOTO来将2000行跳到一个随机区域,但是Anaylsts一直坚持这样做只是这一次并让管理层批准它?
tldr;
如何解决开发人员被迫(强制)不断添加GOTO语句的问题(通过添加,我的意思是添加跳转到随机区域多行),因为它" 更快地获得该功能"?
我开始担心我们可能会失去有价值的开发人员而不是这个...

澄清:
去 here
alsoThere:不,我在谈论那种从一个子程序中跳出1000行到另一个子程序中途的goto.去 somewhereClose
there:我甚至没有谈论你可以合理阅读的那种类型,并确定一个程序正在做什么.去 alsoThere
somewhereClose:这是制作肉丸的那种代码midpoint: 如果第一次在这里转到 nextpoint detail:(每一个几乎完全不同)转到 pointlessReturn
here:在这个问题中,我并没有谈论偶尔使用goto.去there
tacoBell:它刚刚回到绘图板.去 Jail
elsewhere:当分析师每周花一些时间来解决程序正在做什么时,你的代码库就会出现问题.事实上,我实际上取决于我的,hell:如果不是最新的goto goto 4转换goto detail pointlessReturn: goto tacoBell
Jail:实际上,只是一个小胜利的小更新.我花了4个小时一次重构这个特定程序的一部分单个标签,因为我去了svn中的每次迭代.每一步(其中约20)为短小,逻辑和足够容易转到 bypass nextpoint:自发地跳出你一顿,并在您完成一些奇怪的那种面条,肉丸磁性的屏幕.转到 elseWhere
bypass:合理地验证它不应该引入任何逻辑更改.使用这个新的更易读的版本,我与分析师坐下来,现在几乎完成了所有这些变化.去 end
4:第一次*如果第一次在这里转到hell,没有第二次,如果第一次在这里转到 hell,没有第三次,如果第一次在这里转到 hell第四次现在最新转到 hell
end:
twk*_*twk 28
由于错误编写的GOTO引入了多少错误?他们花了多少钱给公司带来了多少钱?将问题变成具体的问题,而不是"这感觉很糟糕".一旦你能够被负责人认为是一个问题,就把它变成一个政策,比如"除了简化函数的退出逻辑之外没有任何新的GOTO",或"没有新的GOTO用于任何不能执行的功能"拥有100%的单元测试覆盖率".随着时间的推移,收紧政策.
Igo*_*aka 12
GOTO没有制作好的代码意大利面条,还涉及到许多其他因素.这个linux邮件列表讨论可以帮助我们了解一些事情(Linus Torvalds关于使用gotos的大局的评论).
试图制定一个"没有goto政策"只是为了没有得到任何东西,从长远来看不会产生任何影响,并且不会使你的代码更易于维护.这些变化需要更加微妙,并专注于提高代码的整体质量,思考平台/语言的最佳实践,单元测试覆盖率,静态分析等.