1

假设我有一个很长的方法链接

object.SetA(123).SetB(234).SetC(345) ...

什么是最好的缩进?所有编译器都支持它们吗?

object.
   SetA(123).
   SetB(234).
   SetC(345) ...

或者

object
  .SetA(123)
  .SetB(234)
  .SetC(345) ...
4

5 回答 5

11

IMO,第二个更好。通过以 . 开始一行,它明确表明它是链式调用的延续。

于 2011-08-31T10:34:33.090 回答
3

是的,所有编译器都会支持它们。您所做的只是添加在词法分析期间由编译器删除的空格。

这是个人喜好问题,但我同意 Mike Kwan 的观点。

于 2011-08-31T10:37:58.307 回答
1

如果链太长,我会写这个,并且不能在一行中出现:

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);
于 2011-08-31T10:36:29.457 回答
0

C++ 对空格不敏感,它们都可以在任何 C++ 编译器上工作(好吧......假设它们在词法分析器中没有错误)。无论如何,我更喜欢最后一个,终止分号放在自己的行上(这使得添加更多链更容易,一个简单的行副本就可以了)。

于 2011-08-31T10:43:38.703 回答
0

假设我们谈论的是同一个对象上的方法链接(每个函数 retuns *this),那么:

object.setA().setB().setC();
object.setD().setE().setF();

长线不仅不好,因为您的屏幕不够宽,无法容纳它们。如果仅此而已,只需购买更大的显示器或减小字体大小即可。它们很糟糕,因为人们一次一行代码,如果你在一行中做的太多,就会破坏他们微小的碳基大脑。

如果一切都失败了,我个人会这样缩进:

object
    .setA()
    .setB()
    ...
;

但我更喜欢:

object.setA();
object.setB();
...

方法链接是一种将更多内容塞进一行的方法,所以如果我们要再次将这些行分开,我看不出有什么好处。有时我们被迫,因为object实际上是一个临时的(函数调用而不是命名变量的结果)或其他东西,我们不能引用它。

你也许可以让这条线从右手边跑出来。不得不横向滚动或换行很烦人,但话又说回来,不得不在一个语句中这样做已经很烦人了,所以显然有一些非常重要的原因。

于 2011-08-31T11:05:17.990 回答