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、2番目の方が優れています。行を . で開始することにより、連鎖呼び出しの継続であることを明示します。

于 2011-08-31T10:34:33.090 に答える
3

はい、すべてのコンパイラがそれらをサポートします。あなたがしているのは、字句解析中にコンパイラによって削除される空白を追加することだけです。

これは個人的な好みの問題ですが、Mike Kwan の指摘には同意します。

于 2011-08-31T10:37:58.307 に答える
1

チェーンが長すぎて 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

*this同じオブジェクト (各関数が retuns を返す) でのメソッド チェーンについて話していると仮定すると、次のようになります。

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

画面の幅が狭いため、長い行は悪いだけではありません。それだけの場合は、より大きなモニターを購入するか、フォントサイズを小さくしてください. 人は一度に 1 行ずつコードを読むため、それらが悪いのです。1 行でやりすぎると、小さな小さな炭素ベースの脳が壊れてしまいます。

他のすべてが失敗した場合、個人的には次のようにインデントします。

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

しかし、私は好むだろう:

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

メソッド チェーンは 1 つの行にさらに多くの情報を詰め込む方法なので、その行を再び分割する場合、私には利点がわかりません。object実際には一時的 (名前付き変数ではなく関数呼び出しの結果) または何かであり、それへの参照を取得できないために強制されることがあります。

おそらく、線を右側からはみ出させることもできます。横にスクロールしたり、行を折り返したりするのは面倒ですが、1 つのステートメントでこれを行わなければならないのも面倒です。明らかに、信じられないほど重要な理由があります。

于 2011-08-31T11:05:17.990 に答える