function - 在编写小函数时避免意大利面条式代码

标签 function coding-style refactoring abstraction

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

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

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

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

非常感谢!

最佳答案

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

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

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

比可读性强得多
if(value > 10 && value < 99) {
   ...
}

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

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

希望这可以帮助 ...

关于function - 在编写小函数时避免意大利面条式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18365505/

相关文章:

javascript - 给div添加单独用JS递增的文本

javascript - 是什么阻止我的验证函数在表单为空时不运行?

javascript - 如何获取 JavaScript 函数中缺少的参数的名称?

sdk - "This is an ' on-wire' 格式结构到底意味着什么?”

java - 类、成员和参数混淆的 Proguard 自定义命名

git - merge 分支之间的大变化的技巧

具有隐藏功能的 Javascript 对象?

java - 是否有任何技术可以使用标志参数拆分方法?

c++ - 为什么 cpplint 不鼓励 Streams?

html - 重构 HTML 和 CSS