Eine Sache, die noch niemand erwähnt hat, werde ich erwähnen: Der Wunsch, Kommentare zu verschachteln, deutet oft darauf hin, dass der Programmierer es falsch macht.
Lassen Sie uns zunächst annehmen, dass der Programmierer nur dann "verschachteln" oder "nicht verschachteln" kann, wenn der Programmierer strukturell Folgendes schreibt:
do_something();
/* comment /* nested comment */ more comment */
do_something_else();
Wann taucht so etwas in der Praxis auf? Mit Sicherheit wird der Programmierer keine verschachtelten Kommentare schreiben, die im wahrsten Sinne des Wortes wie das obige Snippet aussehen! Nein, in der Praxis, wenn wir Kommentare verschachteln (oder wünschen, dass wir sie verschachteln könnten), möchten wir Folgendes schreiben:
do_something(); /* do a thing */
/* [ajo] 2017-12-03 this turned out to be unnecessary
do_something_else(); /* do another thing */
*/
Und das ist SCHLECHT. Dies ist kein Muster, das wir (als Sprachdesigner) fördern wollen! Der richtige Weg, um das obige Snippet zu schreiben, ist:
do_something(); /* do a thing */
Dieser "falsche" Code, dieser Fehlstart oder was auch immer, gehört nicht in die Codebasis. Es gehört bestenfalls in die Versionsverwaltungsgeschichte. Idealerweise würden Sie nie den falschen Code schreiben, oder? Und wenn der falsche Code dort einen Zweck erfüllt, indem die Betreuer gewarnt werden, ihn aus irgendeinem Grund nicht wiederherzustellen, ist dies wahrscheinlich eine Aufgabe für einen gut geschriebenen und absichtlichen Codekommentar. Der Versuch, "Don't Do X" auszudrücken, indem nur ein alter Code hinterlassen wird, der X ausführt, aber auskommentiert ist, ist nicht die lesbarste oder effektivste Methode, um Leute davon abzuhalten, X zu tun.
Das alles läuft auf eine einfache Faustregel hinaus, die Sie vielleicht schon einmal gehört haben: Kommentieren Sie Code nicht aus. ( Die Suche nach diesem Begriff wird eine aufdrehen Menge von Meinungen in Vereinbarung .)
Bevor Sie fragen: Ja, Sprachen wie C, C # und C ++ bereits dem Programmierer geben einen anderen zu Werkzeug „Kommentar out“ große Blöcke von Code: #if 0
. Dies ist jedoch nur eine bestimmte Anwendung des C-Präprozessors, der für sich genommen ein großes und nützliches Werkzeug ist. Tatsächlich wäre es für eine Sprache äußerst schwierig und besonders schwierig, die bedingte Kompilierung mit #if
und dennoch ohne Unterstützung zu unterstützen #if 0
.
Wir haben festgestellt, dass verschachtelte Kommentare nur relevant sind, wenn der Programmierer Code auskommentiert. und wir haben (im Konsens vieler erfahrener Programmierer) festgestellt, dass das Auskommentieren von Code eine schlechte Sache ist.
Um den Syllogismus zu vervollständigen, müssen wir akzeptieren, dass Sprachdesigner ein Interesse daran haben, gute Dinge zu fördern und schlechte Dinge zu entmutigen (vorausgesetzt, dass alle anderen gleich sind).
Im Fall von verschachtelten Kommentare, alles andere ist gleich - Sie sicher das ignorieren Nieder gestimmt Antworten , die Behauptung , dass verschachtelte Parsen /*
irgendwie für den Parser „schwierig“ wäre. (Geschachtelte /*
sind nicht schwerer als geschachtelte (
, die fast jeder Parser auf der Welt bereits verarbeiten muss.)
Sollte es ein Sprachdesigner, wenn alles andere gleich ist, einfach machen , Kommentare zu verschachteln (dh Code auszukommentieren), oder schwierig? Denken Sie daran, dass das Auskommentieren von Code eine schlechte Sache ist.
QED
Fußnote. Beachten Sie, dass Sie verschachtelte Kommentare nicht zulassen
hello /* foo*/bar.txt */ world
ist ein irreführender "Kommentar" - es ist gleichbedeutend mit
hello bar.txt */ world
(was wahrscheinlich ein Syntaxfehler ist). Aber wenn Sie tun erlauben verschachtelte Kommentare, dann
hello /* foo/*.txt */ world
ist ein irreführender "Kommentar" - es ist gleichbedeutend mit
hello
Der Kommentar bleibt jedoch bis zum Ende der Datei offen (was wiederum mit ziemlicher Sicherheit ein Syntaxfehler ist). Daher ist keiner der Wege besonders anfällig für ungewollte Syntaxfehler. Der einzige Unterschied besteht darin, wie sie mit dem absichtlichen Antipattern von auskommentiertem Code umgehen .