7

重要提示:这个问题不是关于支撑风格优于另一种的。我目前正在转换风格,以评估我认为哪种风格最适合我的情况,我喜欢 Allman 和 1TBS 一样多。

1TBS 大括号样式的用户,如何在if语句和后续代码中格式化长条件?

if ((this_is_the_first_part_of_a_long_condition)
    && (the_second_part_is_shorter__wait_no_it_is_not)
    && (and_one_more_for_the_road)) {
    here_comes_the_block_code();
}

我觉得必须有更好的方法。我目前的方法是在代码块的第一行之前添加一个空行。Allman 在这种情况下看起来也不是很好,尽管在我看来更具可读性。

另一个带有for循环的例子:

for (int relevant_counter_variable_name = START_VALUE;
    intelligent_expression_that_may_include_the_counter_variable;
    relevant_counter_variable_update) {
    first_code_line_inside_the_block();
}

不怎么好看...

KNF(8 个空格缩进)在这里会有所帮助,但我想避免这种情况。我还有其他几个选择,但我想听听是否有某种标准方式。

4

5 回答 5

9
if (
    (this_is_the_first_part_of_a_long_condition)
    && (the_second_part_is_shorter__wait_no_it_is_not)
    && (and_one_more_for_the_road)
) {
    here_comes_the_block_code();
}
于 2011-05-09T11:02:36.507 回答
9

我双缩进续行:

if ((this_is_the_first_part_of_a_long_condition)
        && (the_second_part_is_shorter__wait_no_it_is_not)
        && (and_one_more_for_the_road)) {
    here_comes_the_block_code();
}
于 2012-09-07T13:13:16.720 回答
3

为了绝对清晰和可读性,我只是浪费了一些变量:

cond1 = this_is_the_first_part_of_a_long_condition;
cond2 = the_second_part_is_shorter__wait_no_it_is_not;
cond3 = and_one_more_for_the_road;
if (cond1 && cond2 && cond3) {
    here_comes_the_block_code();
}

那里!1TBS 的所有荣耀。没有风格混合。没有丑陋。/* *INDENT-OFF* */Indent(1) 可以不作弊地处理它。

您甚至可以为条件赋予有意义的名称,例如

guidance = this_is_the_first_part_of_a_long_condition;
navigation = the_second_part_is_shorter__wait_no_it_is_not;
surgeon = and_one_more_for_the_road;
if (guidance && navigation && surgeon) {
    capcom_we_are_go_for_powered_descent();
} else {
    agc_alarm(1202);
}
于 2015-08-05T13:09:23.050 回答
1

混搭


我确实同意混合风格经常不受欢迎。
但是,我敢说,在可能的情况下,规则可以弯曲以提高可读性。

在严格执行样式的情况下,(公司编码政策)
我通常这样做:

if (  (this_is_the_first_part_of_a_long_condition) &&    
      (the_second_part_is_shorter__wait_no_it_is_not) &&
      (and_one_more_for_the_road)) {
                here_comes_the_block_code();  
}

只需对所有条件使用一级缩进,
对大括号内的代码使用另一级缩进。
这是可读的,不会冒犯任何纯粹主义者。

于 2011-04-03T18:29:17.300 回答
0

每个级别的单个空格缩进,无论是否需要每个条件都使用括号。

对于复杂的条件,Allman 式括号可以很好地工作。

一般方法适用于不适合一行的代码的延续,或者适用于函数参数列表。

每个关闭元素的缩进与打开元素相同,因此是“));” 用于“Trace.WriteLine(String.Format(”) 和独立的“;”用于“返回”。

YMMV。

   if (
    (
     (this_is_the_first_part_of_a_long_condition) && 
     (the_second_part_is_shorter__wait_no_it_is_not) && 
     (and_one_more_for_the_road) 
    ) ||
    (
     (this_is_the_first_part_yet_another) && 
     (
      (the_second_part_yet_another) ||
      (val < 22)
     )
    )
   ) {
      here_comes_the_block_code();

      int bits = 0
       | O_DEF
       | CONFIG_THIS
       | CONFIG_THAT
      ;

      FILE *OUPT = fopen(
       "/tmp/oupt.txt",
       "a+"
      );

      Trace.WriteLine(String.Format(
       "format {0} 0x{1:x8}"
       ,(eGenericDeviceFeatureEnum)val
       ,val & 0x7ffffc00
      ));

      return
       (CurrentWort != null) &&
       (CurrentWort.IsFeatureSupported(
        eGenericDeviceFeatureEnum.SupportsTriBromoCarcinogen
       ))
      ;
   }
于 2015-08-05T12:58:36.243 回答