最良の解決策は、明らかに、コメントを入れ子にしないことです。ネストされたコメントは通常、間違ったコメントを使用していることを示しています。最も一般的な例は、コメント自体を含むコメントアウトされたコードです。修正するには、コメントアウトする代わりにコードを削除します。
ただし、多くのプログラミング言語には複数のタイプのコメント構文があり、この事実を使用して少なくとも1レベルの深さまでネストできます。たとえば、Javaの場合:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
また、多くの言語では、少なくとも1種類のコメントが一種のネスト可能です。Cライクな言語では、行コメント内の行コメントは無視されます。
// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);
ほとんどのIDEは、1つのアクションで行コメントを使用してコードブロック全体のコメントをサポートし、この種のコメントスタイルを正しく処理します。Pythonの同じ例:
# some_commented_out(code)
# # This is a comment inside the comment!
# # Still inside the nested comment.
# some_more_code_in(outer_comment)
多くの場合、特定のプロジェクトのコーディング標準には、どのコメントスタイルをいつ使用するかに関するルールがあります。一般的な慣習は/* */
、メソッドとクラスのドキュメントにブロックコメント()を使用し、//
メソッド本体などのコメントにインラインコメント()を使用することです。
/**
* Helper class to store Foo objects inside a bar.
*/
public class Foobar {
/**
* Stores a Foo in this Foobar's bar, unless the bar already contains
* an equivalent Foo.
* Returns the number of Foos added (always 0 or 1).
*/
public int storeFoo(Foo foo) {
// Don't add a foo we already have!
if (this.bar.contains(foo)) {
return 0;
}
// OK, we don't have this foo yet, so we'll add it.
this.bar.append(foo);
return 1;
}
}
このようなスタイルでは、/* */
コメントをネストする必要はほとんどありません(メソッドまたはクラス全体を一時的に無効にする必要がある場合、それらの名前を変更しても同じようにうまく機能します)。少なくともIDEの助けが//
あれば、コメントが入れ子になります。
最後に、コードを無効にするには、多くのプログラミング言語で他のオプションがあります。たとえば、Cでは、プリプロセッサを活用できます。
this_is(activated);
#if 0
this_is(!activated);
/* Comments inside this block don't really nest, they are simply removed
along with the rest of the block! */
#endif
動的言語では、多くの場合、if
代わりに通常のステートメントを使用できます。
<?php
if (0) {
// This should never run...
some_stuff_that_should_never_run();
}
ただし、CPPの例とは異なり、この戦略ではソースファイル全体が構文的に有効である必要があるため、柔軟性がはるかに低くなります。
最後に、ネストされたコメントを許可する言語が少なくともいくつかあります。興味のある方のために、ウィキペディアにはすばらしい比較表があります。