Najlepszym rozwiązaniem jest oczywiście nie zagnieżdżanie komentarzy. Komentarze zagnieżdżone są zwykle oznaką niewłaściwego używania komentarzy. Najczęstszym przykładem jest kod z komentarzem, który zawiera same komentarze, a poprawką jest usunięcie kodu zamiast komentowania go.
To powiedziawszy, wiele języków programowania ma więcej niż jeden typ składni komentarzy, i możesz użyć tego faktu, aby zagnieździć co najmniej jeden poziom głębokości. Na przykład w Javie:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
Ponadto w wielu językach co najmniej jeden rodzaj komentarza można zagnieździć; w językach podobnych do C komentarze linii wewnątrz komentarzy linii są ignorowane:
// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);
Większość IDE obsługuje komentowanie całych bloków kodu za pomocą komentarzy liniowych w jednej akcji i poprawnie obsługuje ten rodzaj stylu komentowania. Ten sam przykład w Pythonie:
# some_commented_out(code)
# # This is a comment inside the comment!
# # Still inside the nested comment.
# some_more_code_in(outer_comment)
Często standardy kodowania dla konkretnego projektu mają reguły dotyczące tego, który styl komentarza ma być używany; powszechną konwencją jest stosowanie komentarzy blokowych ( /* */
) do dokumentacji metod i klas oraz komentarzy wbudowanych ( //
) do uwag wewnątrz treści metod i takich, np .:
/**
* 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;
}
}
Przy takim stylu jest mało prawdopodobne, że kiedykolwiek będziesz musiał zagnieżdżać /* */
komentarze (jeśli musisz tymczasowo wyłączyć całe metody lub klasy, zmiana ich nazwy działa równie dobrze, jeśli nie lepiej); i //
komentarze zrobić gniazdo, przynajmniej z niewielką pomocą z Twojego IDE.
Wreszcie, aby wyłączyć kod, masz inne opcje w wielu językach programowania; na przykład w C można wykorzystać preprocesor:
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
W językach dynamicznych często można if
zamiast tego użyć zwykłych instrukcji:
<?php
if (0) {
// This should never run...
some_stuff_that_should_never_run();
}
Jednak w przeciwieństwie do przykładu CPP ta strategia wymaga, aby plik źródłowy jako całość był poprawny pod względem składniowym, więc nie jest on tak elastyczny.
I wreszcie, istnieją przynajmniej niektóre języki, które pozwalają na zagnieżdżanie komentarzy. Jeśli jesteś zainteresowany, wikipedia ma fajną tabelę porównawczą .