7

重要な注意: この質問は、ブレーシング スタイルの優位性に関するものではありません。私は現在、自分の状況に最も適していると思うスタイルを自分で評価するためにスタイルを切り替えています.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 に答える
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();  
}

すべての条件に 1 レベルのインデントを使用し
、中かっこ内のコードに別の追加レベルを使用するだけです。
これは、純粋主義者を怒らせることなく、できるだけ読みやすくなっています。

于 2011-04-03T18:29:17.300 に答える
0

レベルごとにシングル スペースでインデントします。必要かどうかに関係なく、条件ごとに括弧を使用します。

複雑な条件では、Allman スタイルの括弧がうまく機能します。

一般的なアプローチは、1 行に収まらないコードの継続、または関数の引数のリストに対して機能します。

各終了要素は開始要素と同じレベルでインデントされるため、"));" 「Trace.WriteLine(String.Format(」) の場合、および「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
       ))
      ;
   }
于 2015-08-05T12:58:36.243 に答える