假設我有一個很長的方法鏈接縮進方法鏈接
object.SetA(123).SetB(234).SetC(345) ...
什麼是最好的缺口?所有的編譯器都支持它們?
object.
SetA(123).
SetB(234).
SetC(345) ...
或
object
.SetA(123)
.SetB(234)
.SetC(345) ...
假設我有一個很長的方法鏈接縮進方法鏈接
object.SetA(123).SetB(234).SetC(345) ...
什麼是最好的缺口?所有的編譯器都支持它們?
object.
SetA(123).
SetB(234).
SetC(345) ...
或
object
.SetA(123)
.SetB(234)
.SetC(345) ...
假設我們正在對同一對象(每個功能retuns *this
)談論方法鏈,怎麼樣:
object.setA().setB().setC();
object.setD().setE().setF();
龍行不只是糟糕,因爲你的屏幕不夠寬,以包含它們。如果這就是它,只需購買更大的顯示器或縮小字體大小即可。它們是不好的,因爲人們一次編碼一行,如果你在一行中做了太多的事情,你就會破壞他們小小的基於碳的大腦。
如果一切都失敗,我個人倒縮進這樣理解:
object
.setA()
.setB()
...
;
但我更喜歡:
object.setA();
object.setB();
...
方法鏈更補習班到線的方式,所以如果我們再將線路拆分出來,我看不出優勢。有時我們被迫,因爲object
實際上是一個臨時(函數調用的結果而不是命名變量)或其他東西,我們不能引用它。
你也許可以讓線路從右邊跑掉。這很煩人,不得不橫向滾動或者捲起線條,但是又一次令人討厭的是必須在一個聲明中這麼做,所以顯然有一些非常重要的原因。
IMO,所述第二一個更好。通過以。開頭,它明確表示它是鏈接調用的延續。
我會寫這個,如果鏈條過長,不能來上一行:
object.SetA(123)
.SetB(234)
.SetC(345)
.SetD(345)
.SetE(345)
.SetF(345);
,否則我會去這樣的:
object.SetA(123).SetB(234).SetC(345).SetD(345).SetE(345).SetF(345);
像這樣的垂直排列代碼現在已經是絕大多數。 – tenfour
是的,所有的編譯器將支持他們。您所做的只是添加空白,編譯器在詞法分析過程中將其刪除。
這是一個個人喜好的問題,但我同意Mike Kwan提出的觀點。
C++不是空白敏感的,它們都可以在任何C++編譯器上工作(好吧......假設它們在詞法分析器中沒有錯誤)。無論如何,我更喜歡最後一個,終止分號放在它自己的行上(這使得添加更多的鏈更容易,簡單的行復制會做到這一點)。
由於源代碼管理,長行也很糟糕 – tenfour
@tenfour:好的一點,您不希望在'diff'中看到修改的行,並且無法找出更改的位置,因爲它太長了。雖然我剛剛添加了一些文字,爭辯說如果我們要分割成單獨的行,那麼我們可能會盡可能將它們拆分爲單獨的語句。 –
是真實的,但爲什麼要使用方法鏈接有很多原因:在'if' /'while'函數參數中,或者返回值是一個新對象,而您的替代方法不起作用。同樣概念的另一個例子是使用運算符的長表達式(例如,使用iostream運算符編寫調試日誌消息)。即使如此,當結果相同時,爲什麼要使用引用來使每一行成爲一個單獨的語句?我不認爲開發者會對多行語句感到困惑。 – tenfour