在哪里包装一行代码,特别是长参数列表?

coo*_*ird 24 language-agnostic word-wrap

包装代码行的首选方法是什么,特别是涉及长参数列表时?

有几个与包装线有关的问题(比如在编写代码时是否包装文本?还是行宽格式标准),但是我找不到一个涵盖一行代码的地方.

假设我们有一行代码可以像这个例子一样继续前进:

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1, Argument2, Argument3, Argument4);
Run Code Online (Sandbox Code Playgroud)

怎么应该包裹?

以下是我能想到的几种方式,以及它们的一些缺点:

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1, Argument2,
    Argument3, Argument4);
Run Code Online (Sandbox Code Playgroud)

我个人不喜欢这个选项,因为格式似乎在视觉上将参数列表与我试图调用的方法分开,特别是因为在新行上的orphanged参数正上方有一个赋值等号("=").

所以,有一段时间我采用了以下方法:

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1,
                                                       Argument2,
                                                       Argument3,
                                                       Argument4);
Run Code Online (Sandbox Code Playgroud)

这里,参数都捆绑在一起,都在方法的第一个参数的一边.但是,一个问题是,由于选项卡缩进的空格数,参数列表不会总是在第二行中排列.(为格式化输入额外的空格会非常耗时.)

以前的一个问题中的答案提出了以下格式:

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1,
    Argument2,
    Argument3,
    Argument4
);
Run Code Online (Sandbox Code Playgroud)

我实际上喜欢这种格式,因为它的视觉吸引力,但它也可以在视觉上将参数与列表所属的方法分开.另外,我更喜欢单个方法调用而不占用太多行.

所以,我的问题是,如果不首先考虑防止行代码过长的问题,你会如何推荐包装代码行?具体来说,当涉及长参数列表时,哪里是打破一行代码的好地方?

ken*_*nny 14

int SomeReturnValue = SomeMethodWithLotsOfArguments
(   Argument1,
    Argument2,
    Argument3,
    Argument4
);
Run Code Online (Sandbox Code Playgroud)

  • 在一个单独的行中写下每个参数对我来说就像是一种矫枉过正...... (2认同)
  • 我希望这是因为它允许尾随评论.当你有很多类似类型的参数时 - 乱序传递参数是很棘手的 (2认同)

Dhe*_*eer 11

选项3建议

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1,
    Argument2,
    Argument3,
    Argument4
);
Run Code Online (Sandbox Code Playgroud)

是一种更好的方式,因为它给人一种良好的感觉.如果参数的长度或多或少相同,那么我们可以将它们放在一起,以便它们排成一个例如一个表

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1,    Argument2,    Argument3,    Argument4,
    Argument005,  Argument006,  Argument7,    Argument8
);
Run Code Online (Sandbox Code Playgroud)

  • 我通常选择这样做,因为尾随语法运算符可以让开发人员快速知道语句是多行的。将参数减少到每行一个的好处是,不会因为粒度修改上的太多噪音而弄乱 git 提交。 (2认同)

And*_*vig 7

我更喜欢这种方式:

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1, Argument2, 
                        Argument3, Argument4);
Run Code Online (Sandbox Code Playgroud)

线的末端最接近当前的最大线宽(无论是什么),下一行是缩进相对于等号的通常的缩进级别(无论是什么).

不知道为什么,但我认为这是大多数情况下最易读的选择.但是,我选择不对这些事情迂腐,我总是喜欢对于给定的代码段最可读的东西,即使这可能会破坏一些缩进或格式化规则(当然在限制范围内).

这方面的一个例子是,如果函数需要许多参数或者它们本身很复杂的参数,那么我可能会选择这样的东西:

int SomeReturnValue = SomeMethodWithLotsOfArguments(
                        Argument1 + Expression1 + Expression2, 
                        Argument2 - Expression3 * Expression4, 
                        Argument3, 
                        Argument4 * Expression5 + Expression6 - Expression7);
Run Code Online (Sandbox Code Playgroud)

当然,如果参数表达式很长或很复杂,最好在函数调用之前进行计算,并使用临时值来存储结果.


Mar*_*ote 6

我试着保持简短的线条.在这种情况下,我会在赋值之前和每个参数之后断开.我还将逗号放在行的开头,以便于添加新参数:

int SomeReturnValue 
   = SomeMethodWithLotsOfArguments(
         Argument1
       , Argument2
       , Argument3
       , Argument4
    );
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中使用这种布局是很多工作,但Emacs让我自动化.

  • 哎呀!我不喜欢下一行的赋值运算符,甚至从它的 RHS 开始! (2认同)