假设我有一个很长的方法链接
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) ...
IMO,第二个更好。通过以 . 开始一行,它明确表明它是链式调用的延续。
是的,所有编译器都会支持它们。您所做的只是添加在词法分析期间由编译器删除的空格。
这是个人喜好问题,但我同意 Mike Kwan 的观点。
如果链太长,我会写这个,并且不能在一行中出现:
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);
C++ 对空格不敏感,它们都可以在任何 C++ 编译器上工作(好吧......假设它们在词法分析器中没有错误)。无论如何,我更喜欢最后一个,终止分号放在自己的行上(这使得添加更多链更容易,一个简单的行副本就可以了)。
假设我们谈论的是同一个对象上的方法链接(每个函数 retuns *this
),那么:
object.setA().setB().setC();
object.setD().setE().setF();
长线不仅不好,因为您的屏幕不够宽,无法容纳它们。如果仅此而已,只需购买更大的显示器或减小字体大小即可。它们很糟糕,因为人们一次读一行代码,如果你在一行中做的太多,就会破坏他们微小的碳基大脑。
如果一切都失败了,我个人会这样缩进:
object
.setA()
.setB()
...
;
但我更喜欢:
object.setA();
object.setB();
...
方法链接是一种将更多内容塞进一行的方法,所以如果我们要再次将这些行分开,我看不出有什么好处。有时我们被迫,因为object
实际上是一个临时的(函数调用而不是命名变量的结果)或其他东西,我们不能引用它。
你也许可以让这条线从右手边跑出来。不得不横向滚动或换行很烦人,但话又说回来,不得不在一个语句中这样做已经很烦人了,所以显然有一些非常重要的原因。