重要提示:这个问题不是关于支撑风格优于另一支风格的优越性。我目前正在切换样式,以便自己评估哪一种我觉得在我的情况下效果最好,我喜欢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个空格)会有所帮助,但我想避免这种情况。我还有其他一些选择,但我想知道是否有某种标准方式。
答案 0 :(得分: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();
}
答案 1 :(得分: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();
}
答案 2 :(得分:2)
为了绝对清晰和可读性,我只是浪费了一些变量:
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的所有荣耀。没有风格混合。没有丑陋。缩进(1)可以在没有/* *INDENT-OFF* */
作弊的情况下处理它。
您甚至可以为条件提供有意义的名称,例如
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);
}
答案 3 :(得分: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();
}
以及括号内代码的另一个附加级别
这是可读的,不会冒犯任何纯粹主义者。
答案 4 :(得分:0)
每个级别的单个空格缩进,对每个条件使用括号,无论是否需要。
对于复杂的条件,Allman风格的括号可以很好地运作。
一般方法适用于延续不适合一行或代码函数列表的代码。
每个关闭元素在与开放元素相同的级别缩进,因此“));” for“Trace.WriteLine(String.Format(”and freestanding“;”for“return”。
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
))
;
}