Лучшее решение, очевидно, просто не вкладывать свои комментарии. Вложенные комментарии обычно являются признаком того, что вы используете комментарии неправильно. Наиболее распространенным примером является закомментированный код, который содержит сами комментарии, и исправление состоит в том, чтобы удалить код, а не комментировать его.
Тем не менее, многие языки программирования имеют более одного типа синтаксиса комментариев, и вы можете использовать этот факт для вложения как минимум на один уровень глубины. Например, в Java:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
Кроме того, во многих языках по крайней мере один тип комментариев является своего рода вложенным; в C-подобных языках строчные комментарии внутри строчных комментариев игнорируются:
// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);
Большинство IDE поддерживают комментирование целых блоков кода строковыми комментариями в одном действии, и они правильно обрабатывают этот стиль комментирования. Тот же пример в 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;
}
}
При таком стиле маловероятно, что вам когда-либо понадобится вкладывать /* */
комментарии (если вам нужно временно отключить целые методы или классы, переименование их работает так же хорошо, если не лучше); и //
комментарии делают гнездо, по крайней мере , с небольшой помощью интегрированной среды.
Наконец, чтобы отключить код, у вас есть другие варианты во многих языках программирования; например, в 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, эта стратегия требует, чтобы исходный файл в целом был синтаксически верным, поэтому он далеко не такой гибкий.
И, наконец, есть, по крайней мере, некоторые языки, которые допускают вложенные комментарии. Если вам интересно, в Википедии есть хорошая сравнительная таблица .