迭代列表并执行两个操作的单个函数,或者每个执行自己的操作并分别迭代列表的两个函数?

Single function that iterates over a list and does two actions, or two functions that each do their own action and iterate over the list separately?

正如标题所说,两者哪个更好?

1) 迭代列表并执行操作 A 和 B 的单个函数。

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

举一个很简单的例子,假设在一个整数列表中,你想把每个整数乘以3,但你还想计算乘以3后奇数的整数个数。这样会更好吗在一个功能中做到这一点?或者更好地乘以 3 并在单独的函数中计算奇数?

第一个选项会更快,因为您只需要遍历列表一次。但是,它也违反了每个函数只执行一个操作的规则。同样,第二个选项会 运行 变慢,但会更容易阅读和维护。

当您谈论代码质量时,不要太重视性能,因为在您实际对代码执行严格的分析之前无法确定。

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

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

更具可读性

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

随着循环的拆分,最好在不同的函数中,我确信这两个动作是不相关的,所以我可以自由地重构一个而不影响另一个。

局部变量少

执行单个操作并计算单个值的循环只能 return 该值。这意味着您不需要在代码中的多个局部变量中累加值,这使得重构代码变得容易。

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

最后,如果您的性能确实受到影响,您总是可以再次组合循环。