3 回答
TA贡献1836条经验 获得超3个赞
这归根结底是一个主观问题。
也就是说,作为对立面:Google 代码库中的 Java 代码使用了大量构建器,尤其是对于协议缓冲区等数据对象。如果内联表达式就足够了,那么一般的风格偏好倾向于避免使用局部变量,这会导致很多代码看起来像您的示例。
一个显着的区别是 Google 风格鼓励一种叫做矩形规则的东西(不幸的是,我找不到它的链接,尽管这里提到了它)。(我想说这个想法是 John DeTreville 提出的,但我不是 100% 确定。)本质上,矩形规则说您希望语句中的每个表达式都适合矩形字符块。在表达式的矩形内可以有子表达式(每个子表达式在它们自己的矩形内),但外部表达式的任何部分都不应位于内部表达式的矩形内。
(当我在那里时,一致认为外部表达式的结束括号不算作侵入内部矩形,但外部控制语句的结束括号算作。显然你可以花一整天的时间讨论这样的风格问题。)
这意味着编写类似您展示的内容的首选方式看起来更像是:
Car car =
Car.builder()
.engine(
Engine.builder()
.name("Diesel")
.weight(5)
.build()
)
.build();
或者,更常见的是(稍微弯曲矩形规则):
Car car = Car.builder()
.engine(
Engine.builder()
.name("Diesel")
.weight(5)
.build())
.build();
我个人认为最后一个例子最容易阅读:它紧凑而不忙,并且将注意力吸引到语句的重要部分,而不会用不重要的细节分散注意力。并且文本的总体布局与数据结构相匹配,这也有助于理解。
当然,这只是一种风格选择。但是,一个非常大且成功的代码库做出了这样的选择这一事实表明,以这种方式编写代码并没有错,如果您喜欢这样做,您应该可以继续。
添加回答
举报