- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在工作中遇到过这样的情况:在遗留(核心)系统上工作的开发人员在向已被意大利面条式代码感染的现有代码中添加新功能时,被迫使用 GOTO 语句。
现在,我知道使用“只使用一个小 GOTO”而不是花时间重构为更易于维护的解决方案可能存在争议。问题是,这个孤立的“只是一个小小的 GOTO”并不是那么孤立。每周至少一次,有一个新的“一个小转到”要添加。由于可追溯到 1984 年或之前的代码充斥着 GOTO,这些代码库会产生许多 Pastafarians相信它的灵感来自飞行意大利面怪物本身。
不幸的是,用它编写的语言没有任何现成的重构工具,因此很难插入“重构以提高以后的生产力”,因为短期的胜利是这里唯一关注的胜利......
有没有其他人遇到过这个问题,每个人都同意我们不能添加新的 GOTO 来将 2000 行跳转到随机部分,但不断让分析员坚持只做这一次并让管理层批准?
tldr;
如何解决开发人员被迫(被迫)不断添加 GOTO 语句(通过添加,我的意思是添加跳转到许多行之外的随机部分)的问题,因为它“更快地获得该功能”?
我开始担心我们可能会因为这个而失去有值(value)的开发人员给猛禽......
澄清:
转到 here
alsoThere:
不,我说的是那种将 1000 行从一个子例程跳到另一个子例程中途进入 while 循环的 goto。转到 somewhereClose
there:
我什至不是在谈论您可以合理阅读并确定程序在做什么的那种 goto。转到 alsoThere
somewhereClose:
这是一种制作肉丸子的代码 midpoint:
如果第一次来 Goto nextpoint
detail:
(每一个几乎完全不同)转到pointlessReturn
here:
在这个问题中,我不是在谈论偶尔可以使用 goto。转到 there
tacoBell:
它刚刚回到绘图板。转到 Jail
elsewhere:
当每次触及程序时,分析师需要花费数周的时间来解密程序在做什么,那么您的代码库就存在严重问题。事实上,我实际上是我的hell:
如果不是最新的,请转到 4
规范转至 detail
pointlessReturn:
转到tacoBell
Jail:
实际上,只是一个小小的胜利的小更新。我花了 4 个小时将这个特定程序的一部分重构为一个标签,每次迭代都保存在 svn 中。每个步骤(大约 20 个)都很小、合乎逻辑且很容易转到 bypass
nextpoint:
自发地从你的饭菜中跳出来,通过某种奇怪的意大利面肉丸磁力来到你的屏幕上。转到 elseWhere
bypass:
合理验证它不应引入任何逻辑更改。使用这个更具可读性的新版本,我已经与分析师坐下来,现在几乎完成了所有这些更改。转到 end
4:
第一次 *如果第一次来这里转到 hell
, 如果第一次来这里没有第二次转到 hell
, 如果第一次来这里没有第三次转到 hell
第四个现在是最新的转到 hell
end:
最佳答案
由于错误地编写了 GOTO,引入了多少错误?他们花了公司多少钱?把问题变成具体的事情,而不是“这感觉很糟糕”。一旦你被负责人认为是一个问题,把它变成一个策略,比如“除了简化函数的退出逻辑之外,没有任何新的 GOTO”,或者“没有任何功能没有新的 GOTO”具有 100% 的单元测试覆盖率”。随着时间的推移,收紧政策。
关于legacy - 被迫走向黑暗面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910017/
我是一名优秀的程序员,十分优秀!