5

通过观察各种 Android 应用程序(不是我编写的)的源代码,我注意到将某些代码段放入自己的方法中的模式,尽管实际上没有任何代码重用,因为这些方法在整个过程中只被调用一次应用。

到目前为止,我有一条经验法则,即如果一段代码在应用程序代码中使用了两次或多次,那么它应该有自己的方法,仅仅是为了消除代码冗余。

但是看到那些整齐地分解成自己的方法(和自己的方法调用开销)的代码块,我开始可能我错过了一些东西。

除了文档目的之外,还有什么其他原因可以证明只将 4 行代码(仅调用一次!)放入自己的方法中?

4

7 回答 7

8

入手的三个理由:

  • 您可以将它与其他任何东西分开测试。(这可能最终违背了只测试公共 API 的口头禅,但这对我来说很好。如果我必须创建一个方法包级别而不是私有的方法来测试它,这很烦人,但我宁愿这样做而不是必须一次性测试一大堆逻辑。)
  • 您可以从简单方法构建更复杂的方法,其中整个复杂方法处于单个抽象级别,无需指定细节。阅读高级方法意味着只阅读组成它的构建块的名称;然后,如果需要,您可以深入了解您感兴趣的细节。
  • 您可以编写每个都做好一件事的方法,并以一种明显的方式命名和记录它们。

当然,这可能是过度的,但它绝对是有用的。

于 2012-01-30T15:12:44.700 回答
7

我能想到几个原因,但诚然有一些重叠:

  • 它有助于使您的代码自我记录。
  • 它使(单元)测试更容易。
  • 它有助于阻止您使用数百行长的方法。
  • 您可能希望将来在其他地方使用该代码。

当然,所有这些都依赖于假设这 4 行代码是相关的,并且执行单个功能。我发现一个好的经验法则是:如果你想不出它的名字,它可能不应该是一种方法。

于 2012-01-30T15:17:50.940 回答
4

文档和可读性是将代码放入方法的很好理由,即使这些方法只会执行一次。某些应用程序在启动时可能需要完成一堆逻辑步骤……您是否宁愿将所有代码混杂在一个 init 方法中,还是使用一个调用正确命名的方法的 init 方法?

于 2012-01-30T15:12:44.173 回答
3

它有望促进更简洁的代码,并且应该更容易测试。

您提到了方法调用开销,但如果该方法只调用一次,那应该无关紧要。

于 2012-01-30T15:12:54.843 回答
2

请参阅为Compose 方法重构提供的理由。

于 2012-01-30T15:12:14.313 回答
1

可读性是我这种编码行为的重要原因。

如果我盯着一个长代码清单,寻找一个特定的过程或一段代码,那么该特定过程或一段代码的位置可能不会立即显而易见。

为什么我们要按段落和章节来写书?为什么歌曲有节/节、合唱和桥段?因为在小的、高度具体的块中更容易接受一个大想法。

就像软件开发一样,要驱动高效、干净的代码,尽可能快速优雅地完成工作。它还必须被要维护它的人阅读。

至少,这是我的解释。

于 2012-01-30T15:18:15.520 回答
0

Java VM 通常对符合内联条件的方法的最大大小有限制。可以这么说,提取不经常调用的代码可能会使车轮润滑。你能举出例子吗?

于 2012-01-30T15:22:54.387 回答