3 回答

TA貢獻1836條經(jīng)驗 獲得超3個贊
這歸根結(jié)底是一個主觀問題。
也就是說,作為對立面:Google 代碼庫中的 Java 代碼使用了大量構(gòu)建器,尤其是對于協(xié)議緩沖區(qū)等數(shù)據(jù)對象。如果內(nèi)聯(lián)表達式就足夠了,那么一般的風(fēng)格偏好傾向于避免使用局部變量,這會導(dǎo)致很多代碼看起來像您的示例。
一個顯著的區(qū)別是 Google 風(fēng)格鼓勵一種叫做矩形規(guī)則的東西(不幸的是,我找不到它的鏈接,盡管這里提到了它)。(我想說這個想法是 John DeTreville 提出的,但我不是 100% 確定。)本質(zhì)上,矩形規(guī)則說您希望語句中的每個表達式都適合矩形字符塊。在表達式的矩形內(nèi)可以有子表達式(每個子表達式在它們自己的矩形內(nèi)),但外部表達式的任何部分都不應(yīng)位于內(nèi)部表達式的矩形內(nèi)。
(當我在那里時,一致認為外部表達式的結(jié)束括號不算作侵入內(nèi)部矩形,但外部控制語句的結(jié)束括號算作。顯然你可以花一整天的時間討論這樣的風(fēng)格問題。)
這意味著編寫類似您展示的內(nèi)容的首選方式看起來更像是:
Car car =
Car.builder()
.engine(
Engine.builder()
.name("Diesel")
.weight(5)
.build()
)
.build();
或者,更常見的是(稍微彎曲矩形規(guī)則):
Car car = Car.builder()
.engine(
Engine.builder()
.name("Diesel")
.weight(5)
.build())
.build();
我個人認為最后一個例子最容易閱讀:它緊湊而不忙,并且將注意力吸引到語句的重要部分,而不會用不重要的細節(jié)分散注意力。并且文本的總體布局與數(shù)據(jù)結(jié)構(gòu)相匹配,這也有助于理解。
當然,這只是一種風(fēng)格選擇。但是,一個非常大且成功的代碼庫做出了這樣的選擇這一事實表明,以這種方式編寫代碼并沒有錯,如果您喜歡這樣做,您應(yīng)該可以繼續(xù)。
添加回答
舉報