循环访问列表并执行两个操作的单个函数,还是分别执行自己的操作并分别遍历列表的两个函数?

时间:2018-12-29 09:59:29

标签: language-agnostic refactoring

正如标题所述,两者中哪一个是更好的选择?

1)一个遍历列表并执行操作A和B的单个函数。

2)两个单独的函数,每个函数各自执行自己的动作并分别遍历列表。

对于一个非常简单的示例,假设在一个整数列表中,您想要将每个整数乘以3,但是您还想在乘以3之后计算奇数的整数数目。这样做会更好吗?这个功能合一吗?还是最好乘以3并在单独的函数中计算奇数整数?

第一个选项将更快,因为您只需要遍历列表一次。但是,这也违反了每个功能仅执行一项操作的规则。同样,第二个选项运行速度较慢,但​​更易于阅读和维护。

1 个答案:

答案 0 :(得分:0)

在谈论代码质量时,不要太重视性能,因为在实际对代码进行严格的性能分析之前,没有办法确保性能。

除非您要处理数十亿条记录,否则拆分循环通常不会对性能造成重大影响。大多数现代编译器在优化方面都非常有效,因此您的假设可能只是错误的。

现在让我们看看拆分循环的一些好处

更具可读性

过程代码的缺点之一是,在阅读所有代码之前,很难知道代码的哪些部分是相关的。因此,如果在同一循环中有两个动作,则在我阅读整个循环之前,我不知道它们是否相关。这会使更改变得非常困难。

有了循环,最好在不同的功能中进行循环,我确信这两个动作是无关的,因此我可以自由地重构一个而不影响另一个。

缺少局部变量

执行单个动作并计算单个值的循环只能返回该值。这意味着您无需在代码中累积多个局部变量中的值,从而可以轻松地重构代码。

拆分循环通常会带来更多重构的机会,因为现在您对代码有了更深入的了解,并且更容易修改。

最后,如果您确实获得了出色的性能,则总是可以再次组合循环。