8

我对“意大利面条代码”的理解是一个代码库,它从一个代码块跳转到另一个代码块,没有逻辑和清晰的目的。最常见的违规者似乎是 GOTO 语句。

我目前正在阅读/参考 Clean Code: A Handbook of Agile Software Craftsmanship 的功能章节。作者虽然承认自己,但对函数的大小非常严格。我理解保持函数较小的想法,但是,他建议它们应该在 5 行左右。虽然类当然变得更加清晰易读,但我害怕通过编写更小的函数来创建意大利面条式代码。较小的函数似乎也无意中创建了更高的抽象。

代码在什么时候变成意大利面条代码?抽象到什么程度太抽象了?任何答案都会非常有帮助。

顺便说一句,尽管这是我第一次发布问题,但我是 Stack Overflow 的长期追随者,因此也欢迎对我的帖子提出任何建议。

非常感谢!

4

3 回答 3

6

正如评论中已经说过的,没有绝对的规则。最后,您应该以代码的良好可读性为目标。但这不仅仅与您的方法的长度有关。Robert Martin 建议根据抽象程度对方法进行排序。抽象方法应该在你的类的顶部,方法越多,它的位置就应该越深。

另一个重要方面是方法名称。应该选择好,以明确该方法的作用!如果您明智地选择方法名称,那么几乎不需要注释。例如,考虑一个 if 语句:

if(isValidAge(value)) {
   ...
}

比可读性强得多

if(value > 10 && value < 99) {
   ...
}

因为声明的意图变得更加清晰。当然,您可以在第二个示例中添加评论。但是评论经常变得过时(罗伯特马丁的书中有一个额外的章节)。我认为,这种编程风格导致了许多简短的方法。

很难选择正确的抽象级别。根据我的经验,从低层次的抽象开始更容易。所以我可以先集中精力很好地解决问题。当我以后需要更多抽象时,我仍然可以重构代码。TDD 有很大帮助!

希望这可以帮助 ...

于 2013-08-21T21:20:35.310 回答
2

我同意这里的评论和答案。从实践的角度来看,罗伯特马丁在他的书中所写的思想每次都是非常好的方向,我试图尽可能接近这个“规则”,实际上 5 行方法大多还不错。

在我看来,避免意大利面条式代码的最佳方法是编写具有高内聚性的(小)类。缺点是你会变成一堆类,这有时会让新员工加入项目变得更加困难。

于 2013-08-22T05:08:07.617 回答
1

我理解保持函数较小的想法,但是,他建议它们应该在 5 行左右。

这听起来很理想:)

虽然类当然变得更加清晰易读,但我害怕通过编写更小的函数来创建意大利面条式代码。

意大利面条代码是由代码从一个地方跳到另一个地方引起的(在同一个函数中具有不同的抽象级别 - 低级 IO 代码和高级应用程序逻辑)。如果你提取小函数,你的结果会离意大利面条代码更远,而不是更近)。

代码在什么时候变成意大利面条代码?

当代码迫使您(程序员)逐行进行心理跳转(切换上下文)时,代码就是意大利面条代码。无论您是否使用 GOTO 都是如此(但 GOTO 会使问题变得更糟)。

于 2013-08-22T15:08:22.770 回答