Очевидно, найкраще рішення - просто не вкладати свої коментарі. Вкладені коментарі зазвичай є ознакою того, що ви неправильно використовуєте коментарі. Найпоширеніший приклад - коментований код, що містить самі коментарі, а виправлення - видалити код, а не коментувати його.
Однак, у багатьох мовах програмування є більше одного типу синтаксису коментарів, і ви можете використовувати цей факт, щоб ввести принаймні один рівень глибоко. Наприклад, на Java:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
Крім того, у багатьох мовах принаймні один тип коментарів є своєрідним-нестабільним; у мовах, подібних С, ігнорування рядків у коментарях до рядків ігнорується:
// 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, ця стратегія вимагає, щоб вихідний файл у цілому був синтаксично дійсним, тому далеко не такий гнучкий.
І нарешті, є хоча б деякі мови, які дозволяють вкладати вкладені коментарі. Якщо ви зацікавлені, у wikipedia є хороша діаграма порівняння .