在编写小函数时避免使用意大利面条代码

Chr*_*ris 8 refactoring abstraction coding-style function

我对"Spaghetti Code"的理解是一个代码库,它从一个代码块跳转到另一个代码块,没有逻辑和清晰的目的.最常见的罪犯似乎是GOTO声明.

我目前正在阅读/参考清洁代码:敏捷软件工艺手册的功能章节.虽然自己承认,作者对功能的大小非常严格.我理解保持功能小的想法,然而,他建议它们应该在5行左右.虽然Classes肯定变得更易读,但我害怕通过编写较小的函数来创建意大利面条代码.较小的函数似乎也无意中创建了更高的抽象.

代码在什么时候成为意大利面条代码?如何抽象是过于抽象?任何答案都会非常有帮助.

顺便说一句,我是Stack Overflow的长期追随者,虽然这是我第一次发帖提问,所以对我的帖子的任何建议也是受欢迎的.

非常感谢!

Mar*_*ann 5

正如评论中已经说过的那样,没有绝对的规则.最后,您应该以提高代码的可读性为目标.但这并不是关于你的方法的长度.罗伯特马丁建议根据抽象程度对方法进行排序.抽象方法应该是你班级的顶层,方法越多,它应该越深.

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

if(isValidAge(value)) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

比...更具可读性

if(value > 10 && value < 99) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

因为声明的意图变得更加清晰.因为你可以在第二个例子中添加评论.但是评论经常变得过时(罗伯特·马丁的书中还有一章关于这一点).我认为,这种编程方式导致了许多简短的方法.

很难选择合适的抽象级别.根据我的预测,从较低的抽象级别开始更容易.所以我可以先集中精力解决问题.当我以后需要更多抽象时,我仍然可以重构代码.TDD帮助很大!

希望这可以帮助 ...