12

这只是一个一般性的帮助问题,我想知道在 C++ 应用程序的代码中拥有一组小函数与拥有一个包含解决问题所需的所有语句的长复杂函数相比有什么优势?

4

5 回答 5

28

此助记符的编辑信用归于 OP 中的评论者。

将大功能分解为几个较小的功能可能会导致谋杀!在这种情况下,这可能是一件好事。:)

M-可维护性。_ 更小、更简单的功能更容易维护。

U-可理解性。更简单的功能更容易理解。

R -可重用性。通过将常用操作移至单独的函数来鼓励代码重用。

D-可调试性。调试简单函数比调试复杂函数更容易。

E-可扩展性。代码重用和可维护性导致功能在 6 个月内更容易重构。

R-回归。_ 重用和模块化导致更有效的回归测试。


将大功能分解为更小的功能有一些潜在的好处。按照他们从我脑子里掉出来的顺序:

  1. 它鼓励代码重用。通常在大型函数中,您必须多次或多或少地做同样的事情。通过将其推广到单个通用函数,您可以在多个地方使用该代码块。

  2. 代码重用可以通过将潜在的错误隔离到一个地方而不是几个地方来帮助提高健壮性和可维护性。

  3. 当代码行数较少且对命名良好的函数进行大量调用时,更容易理解函数的语义。

  4. 如果您反对具有多个返回点的函数,则将大函数分解可以帮助减少它们。

  5. 它有助于识别和隔离(潜在)具有微妙数据依赖性的问题,否则这些问题很难被注意到。

然而,重要的是要注意,你把它的好与坏放在一起。分解大函数也有一些潜在的缺点:

  1. 如果大功能以前有效,那么尝试对其进行模块化可能会产生缺陷。

  2. 在多线程应用程序中,如果您的同步策略很微妙或完全错误,您可能会引入死锁和竞争条件。

  3. 您可能会从函数调用中引入性能损失。

于 2012-11-06T17:55:49.747 回答
3

更清晰的代码意味着更容易理解和维护。

于 2012-11-06T17:47:59.197 回答
0

一个大的复杂功能就是:复杂。

将您的代码分成单独的函数使您的代码更易于使用。首先,当您查找执行特定任务的代码部分时,如果它在自己的函数中会更容易找到。

其次,对一个简单的函数进行更改要容易得多——您不需要了解大量代码来修改该函数。

此外,您可能会发现在另一个项目中重用该代码更容易,因为它被划分为更小的函数,这些函数可能用于更多目的,而不仅仅是单个大函数。

于 2012-11-06T17:58:43.030 回答
0

将程序拆分为多个功能的优点是:

  • 大多数程序都有一些在多个地方需要的基本功能。在单独的函数中拥有该功能意味着当使用相同的功能时会更加明显,并且您也只需修复一次它的问题。
  • 通过将程序拆分为函数,您可以在代码中引入多层次的抽象。在主函数中,您可以大致了解程序的功能,调用树上的每一级都显示了如何实现某些方面的更多细节。
于 2012-11-06T18:06:09.210 回答
0

在医疗设备系统中,将代码分解成更小的部分可以减少回归测试的需要,并将更改的影响缩小到更小的范围。

例如,假设我们在一个文件中有 3 个主题的 15 个函数。

如果我更改文件中的某个函数,则所有内容都需要重新构建和重新测试
如果我将文件拆分为 3 个单独的文件,每个文件有 5 个函数,我只需要重新构建 5 个函数并重新测试 5 个函数。测试 5 个函数比 15 个函数需要更少的测试时间。

此外,当人员团队处理相同的代码库时,划分代码会降低两个或更多人处理同一文件的可能性。多人处理同一个文件会有很多冲突,例如在签入过程中一个人的代码被意外删除。

于 2012-11-06T18:06:41.453 回答