33

Java プログラミング言語では、コード ブロックのブレースを、ブレースが終了するコード ブロックを簡単に説明するコメントで終了することは、受け入れられている慣行ですか? 個人的には、コードの可読性を乱す役に立たないコメントだと思いますが、おそらく間違っている可能性があります。例えば:

public void myMethod(int foo) {    
    // some code
    if (foo == 2) {
        for (int i = 0; i < myMax; i++) {
            while (true) {
                // some more code
            } // end while
        } // end for
    } // end if
} // end myMethod(int)

同様の方法でコード ブロックにコメントを付ける慣行は、受け入れられている慣行ですか?

4

6 に答える 6

58

私の見解では、原則として、それは良い習慣ではありません。ルールには常に例外がありますが、非常にまれです。

それは良い習慣ではありません。

  1. 最新のエディターでは、カーソルを閉じ括弧に置くと開き括弧が強調表示され、その逆も同様です。
  2. 最も重要なこと: 句の先頭が表示されない可能性がある場合は、メソッドが巨大 (ページの半分以上) であることを意味し、これは悪い習慣です。
  3. これはコードにノイズを追加し、従来の Java コーディング スタイルに慣れている読者を混乱させます。
  4. LordScree-Joachim Sauer のコメントを組み込む: これらのコメントを維持するのは首の痛みです。そのため、ほとんどの場合、それは維持されず、情報は通常、現実と同期しなくなります。
于 2012-10-09T02:33:50.007 に答える
37

これは厳密には悪い習慣ではありませんが、オブジェクト指向コーディングの貧弱な実践による致命的な副作用です!

また、これはスタイル ガイドラインと「自己文書化コード」の原則に違反しています。ブラケットの配置について読者を混乱させるほど多くのブラケットやメソッドを使用しないでください。代わりに、十分に文書化された別のメソッドでその機能をカプセル化してください。

ブラケットは、ループまたは複雑な if-else ロジック チェーンのいずれかを意味します。適切なプログラミング プラクティスは、メソッドに 1 つのことを正確に実行させ、それを適切に実行させてから、これらの小さな原子化されたメソッドからプログラムを構築することです。私はバトラー・ランプソンの影響力のある著書「コンピューター・システム設計のヒント」を読みます。優れたソフトウェアを設計する方法について、いくつか詳細に説明します。

基本的に、次の理由により、このようにコメントしないでください。

  1. スタイルガイドラインに違反しています
  2. 貧弱なオブジェクト指向プログラミングを示しています - 機能を原子化してください!
  3. これは、Java が作成された理由の根底にある概念 (カプセル化、特に情報の隠蔽) に反する、コーディング作業の致命的な副作用です。
  4. 自己文書化コードの概念に違反しています
  5. 他のプログラマーはあなたをからかうでしょう。
于 2012-10-09T03:46:19.517 に答える
2

これを行うのは、コード内に多数の右中括弧が連続している場所がある場合のみです。しかし、すべてのブレースではありません。主に、繰り返されるコードブロックが何であるかを簡単に確認できるように、ループに使用しているようです。

次のようになります。

            // ...
            file.Close();
          }
        }
      }
    }
  }
}

次に、いくつかのコメントを追加すると役立ちます。

            // ...
            file.Close();
          }
        }
      }
    }//for: 各ファイル
  }
}
于 2013-11-21T07:31:45.737 に答える
1

メソッドまたは関数がどれほど複雑かによって異なります。簡単に読んで理解できるものがあれば、その部分が終了したことを説明するコメントですべての行を終了しても意味がありません。それがインデントと改行の目的です。ただし、非常に複雑でコードの大部分に影響を与えるものがある場合は、そのコードがどこで終了し、そのセクションが何をするかを示す必要があります。

于 2012-10-09T02:31:06.747 に答える
0

同じ種類のブロックがネストされていると、うまくいかず混乱する可能性があります。4 つまたは 5 つのネストされた if ステートメントがあるとします (これは状況を示すための単なる例であり、「それらを分離する必要がある」または「メソッドを作成する」という提案に関係なく)、その場合は 4 つまたは 5 つになります。異なる //順序付けされている場合は終了。しばらくすると、どの「end if」がどのステートメントに対するものであるかを混乱させ、実際のコード/ステートメントを無意識のうちに確認するために余分な労力を費やすようになります。

于 2012-10-09T02:54:15.070 に答える
0

IMO、あまり役に立ちません。ループまたは if ステートメント内のコードは、大きすぎないようにする必要があります。ループ内に 5​​00 行あると助かります。

于 2012-10-09T03:04:37.627 に答える