Würde eine Sprache, die keine Kommentare zulässt, besser lesbaren Code liefern? [geschlossen]

15

Aus Neugier begann ich mich zu fragen, ob eine Sprache, die keine Kommentare zulässt, besser lesbaren Code liefern würde, da Sie gezwungen gewesen wären, selbstkommentierenden Code zu schreiben.

Andererseits könnten Sie genauso schlechten Code schreiben wie zuvor, weil es Ihnen einfach egal ist. Aber was ist deine Meinung?

Gablin
quelle
44
Glauben Sie, es gibt einen Unterschied zwischen einer Sprache, die keine Kommentare zulässt, und Entwicklern, die sie nicht verwenden?
Jeremy Heiler
21
Die Idee, Kommentare nicht zuzulassen, würde Entwickler dazu zwingen , mehr selbstdokumentierenden Code zu schreiben, ist absurd.
Adam Crossland
2
@ Jeff, das ist eine IDE / Editor-Funktion, keine Langugae-Funktion IMHO
jk.
4
Ich
2
@Adam @ jk01: Sie haben sogar eine Sprache, die Entwickler zwingt, den Code auf eine bestimmte Weise einzurücken ;-)
Joris Meys

Antworten:

61

Ich denke, Programmierer würden einen anderen Weg finden, um Kommentare hinzuzufügen ...

string aComment = "This is a kludge.";
Philip Regan
quelle
7
Ich mag, wie dieser "Kommentar" mehrere Ebenen hat
Logan Capaldo
29
Ein zusätzlicher Vorteil ist, dass es in der Binärdatei abgelegt wird, sodass Sie die Kommentare dort auch sehen können! Vereinfacht das Reverse Engineering erheblich.
1
Du hast recht. Wir müssten stattdessen #ifdef-Anweisungen verwenden.
James
9
Dies ist wahrscheinlich das beste Beispiel für "Programmieren in einer Sprache" im Gegensatz zu "Programmieren in einer Sprache", das ich je gesehen habe. =)
gablin
2
In MOO werden Kommentare unterstützt, aber alle Programme werden zum Speichern analysiert und zum Anzeigen nicht analysiert, sodass Kommentare verloren gehen. Das Idiom für hartnäckige Kommentare ist String-Literale ala"this is a comment";
Ben Jackson
44

Ich denke nicht, dass es so einfach ist:

Selbst in gut geschriebenem, selbstdokumentierendem Code gibt es legitime Situationen, in denen Sie Kommentare schreiben sollten.

Niemand
quelle
13
+1 für Kommentare, die mehr sind als eine einfache Darstellung dessen, was Code tut. Selbst der beste 'selbstdokumentierende Code' muss Kommentare für die Ausarbeitung vieler Dinge haben. Code weist häufig externe Abhängigkeiten, Eingabeannahmen, Vorbehalte, verbesserungsfähige Bereiche, bekannte Schwachstellen und unzählige andere Dinge auf, die ansonsten nicht berücksichtigt werden. Kommentare haben viele Verwendungszwecke.
Adam Crossland
3
Genau. Wie registriert man "Vorsatz" oder "Warum" oder "Korrektheitsbeweis" kommentarlos?
S.Lott
2
Einverstanden, Kommentare sollten "Warum" und nicht "Was" sein. Wer das Was nicht aus dem Code entnehmen kann, sollte es nicht lesen.
Matthew Read
3
@Matthew: Um fair zu sein, können Sie leicht Code schreiben, der nicht leicht zu entziffern ist. Aber ja, lesbarer Code ist die beste Quelle für "was".
14

Angenommen, Sie sind ein perfekter Programmierer (was Sie aber nicht sind, nehmen wir nur an) ...

Es gibt viele nicht offensichtliche Effekte, die im Code auftreten können, wenn Sie mit Dingen arbeiten, die Sie nicht geschrieben haben. Zum Beispiel kann es Designfehler in der Bibliothek eines anderen oder (wenn Sie ein Kernelentwickler sind) in der Hardware eines anderen geben. Es kann für das Verständnis des Codes von entscheidender Bedeutung sein, Kommentare zu haben, um zu erklären, warum Sie einen bestimmten Kludge an einer bestimmten Stelle verwendet haben.

Ken Bloom
quelle
11

Es fällt mir schwer, mich auf die Idee einzulassen, dass das Entfernen von Optionen aus einer Sprache die in dieser Sprache geschriebenen Programme irgendwie verbessern würde. Kommentare sind nicht obligatorisch und das Schreiben von selbstdokumentierendem Code ist ebenfalls nicht erforderlich.

Es gibt keinen Ersatz für gute Entwicklungspraktiken.

Otávio Décio
quelle
6

Theoretisch war COBOL ursprünglich so konzipiert, dass es selbst dokumentierend genug war, dass auch Nichtentwickler (dh Supervisors) den geschriebenen Code überprüfen und feststellen konnten, was vor sich ging. In der Praxis ist es jedoch schwierig, mit zunehmender Komplexität eines Programms alles zu verstehen, was ausschließlich über den Code geschieht.

Während Entfernen Kommentare einige Entwickler zu schreiben Code zwingen könnte , die besser an Selbst Dokumentation ist, gibt es da draußen schlecht dokumentierte Code schreiben , dass immer noch Entwickler sind (dh Variablennamen a, b, cetc,) und es sind diese Gewohnheiten , dass die Menschen geschult werden müssen heraus von von. In diesen Fällen würde das Entfernen von Kommentaren diese Entwickler nicht beeinträchtigen und möglicherweise die Bemühungen anderer Entwickler behindern, komplexe Codeteile zu erklären.

rjzii
quelle
1
Ich lese gerade einen Code mit folgendem argument = 3.0; aa = sqrt( argument ); bb = f( aa ); Inhalt : Seufz.
S.Lott
Cobol ist eine spezielle Sprache. Aber die "." Betreiber ist böse !!! Es unterbricht die Syntax eines Satzes.
Loïc Faure-Lacroix
3

Jedes Programm wird geschrieben, um funktionale Anforderungen zu implementieren, die außerhalb des Programms liegen, sei es schriftlich oder nur im Kopf einer Person.

Ich denke, die wichtigste Funktion von Kommentaren besteht darin, eine Zuordnung zwischen den Anforderungen und dem Code herzustellen. Die Zuordnung ist erforderlich, um inkrementelle Änderungen zuzulassen. Wenn sich die Anforderungen ändern, müssen entsprechende Änderungen am Code vorgenommen werden, wenn der Code eine Lösung für die Anforderungen bleiben soll. Die Kommentare dienen als Fahrplan für die Änderungen.

Wenn die Sprache eine ideale domänenspezifische Sprache (DSL) ist, die perfekt an das zu lösende Problem angepasst ist, sollte das Mapping ein einfacher Isomorphismus sein und es sind keine Kommentare erforderlich. Der Quellcode würde einfach das Problem angeben, und nichts anderes müsste gesagt werden. Die Lösung des Problems würde in der Implementierung der Sprache begraben sein.

Da es sich bei den Sprachen, in denen wir arbeiten, nicht um solche DSLs handelt und dies für einige Zeit bleiben wird, benötigen wir noch Kommentare . Es ist eine Frage des Grades. Manchmal ist das Problem eine gute Übereinstimmung mit der jeweiligen Sprache, aber normalerweise nicht.

Siehe auch...

Mike Dunlavey
quelle
2

Ich arbeite an einem Ort, an dem Inline-Kommentare nicht zulässig sind (dh Sie können Kommentare nur oben in den Funktionen einfügen). Nein, es macht den Code nicht einfacher zu lesen. Es macht es um Größenordnungen schlimmer.

Xodarap
quelle
Unter der Annahme, dass die Anzahl der Methoden unbegrenzt ist, können Sie Ihre Codeblöcke einfach in anwendbare Methoden umwandeln und den Methoden dann beschreibende Namen geben (oder in Ihrem Fall weitere Kommentare). In den meisten "guten" Codes, die ich gesehen habe, sind Methoden selten länger als etwa 10 Zeilen und es ist ziemlich offensichtlich, was sie bewirken.
Scott Whitlock
@Scott - Ich bin ein klarer Befürworter, dass Code selbstdokumentierend sein sollte und dass Inline-Kommentare vermieden werden sollten, aber es ist übertrieben, sie ausdrücklich zu verbieten.
Jason Baker
@Jason - Ich stimme dir zu, aber ich stimme der Idee nicht zu, dass es ohne Inline-Kommentare "Größenordnungen schlechter" ist.
Scott Whitlock
@Scott: Du bekommst eine Menge Kommentare wie "Der Grund, warum wir die seltsame Nullprüfung in Zeile 37 durchführen, ist ..." und dann musst du deine Augen zwischen dem Code und den Kommentaren bewegen. Es wäre viel einfacher, diesen Kommentar über Zeile 37 zu stellen.
Xodarap
2

Ich vermeide es, Code zu kommentieren, und es funktioniert.

Ich vermeide alle In-Code-Kommentare (Inline- oder Stream-Kommentare) zugunsten von docblock + aussagekräftigen Variablen + spartanischer Programmierung und es funktioniert.

Und ja, ich weiß, dass DocBlocks technisch gesehen Kommentare sind, sie sind jedoch komplementär zu Code, nicht aufdringlich und "standardisiert" ... alles, was ein gewöhnlicher Kommentar nicht ist.

Was ich denke, könnte als Ersatz für Kommentare funktionieren: eine standardisierte DocBlock-Sprache / Syntax / Idiom, so etwas wie Annotationen in Java.

Dukeofgaming
quelle
"eine standardisierte docblock sprache / syntax / idiom": Würde das nicht doxygenfunktionieren? en.wikipedia.org/wiki/Doxygen
sleske
Doxygen ist wie phpdocumentor ein Dokumentationswerkzeug und generiert die Java-Dokumentation aus javadoc (homonim?). Was ich meine ist, dass die Sprache / Syntax / Idiome Teil der Programmiersprache selbst war und kein Kommentar, der nach Tags / Eigenschaften analysiert werden muss.
dukeofgaming
4
Sie vermeiden Kommentare, indem Sie sie anders nennen.
Nate CK
2

Dies würde nicht nur die Qualität nicht beeinträchtigen, wie andere beobachtet haben, es wäre auch wirklich ärgerlich.

Ich bin mir sicher, dass die meisten von uns von Zeit zu Zeit so etwas gemacht haben:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

Wie irritierend wäre es, wenn Sie nicht ein paar Codezeilen auskommentieren könnten, um herauszufinden, woher dieser Fehler kommt?

Unabhängig von den Kommentaren zur Funktionsweise von Code sind solche einfachen praktischen Dinge oder das Ablegen einer praktischen TODONotiz Dinge, die es einfacher machen, kleinere Probleme zu beheben und uns daran zu erinnern, was wir getan haben, als wir mit dem Schreiben des Codes begonnen haben.

Glenatron
quelle
1

Kommentare sind wie eine Buchzusammenfassung. Sicher, Sie können alles verstehen, indem Sie Code lesen, aber warum in aller Welt möchten Sie eine ganze Seite lesen, wenn sie in einer kommentierten Zeile zusammengefasst werden kann?

Niphra
quelle
3
Wenn Sie es in einer Zeile zusammenfassen können, können Sie eine Funktion oder Methode so aussagekräftig benennen, dass sie erklärt, was sie tut.
Scott Whitlock
1

Während ich den anderen Antworten zustimme, dass selbst selbstdokumentierender Code Kommentare benötigt, ist dies nur für aktuelle Sprachen relevant .

Ich denke, die eigentliche Frage ist: "Ist es möglich, eine neue Programmiersprache zu entwerfen, die keine Kommentare benötigt ?" Es müsste ein ziemlich hohes Niveau mit viel Abstraktion sein. Jede Anweisung und Funktion müsste über die Syntax der Sprache lesbar sein.

Verärgerte Ziege
quelle
1
Literate Programming bietet eine Sprache, die keine Kommentare benötigt. Sie schreiben Ihr Dokument, das alle erforderlichen Erklärungen, Unterstützungen, Beweise, Vorsätze, Kompromisse, Kludges usw. sowie Code enthält. Da der Code nicht für sich alleine gedacht ist, funktioniert er einwandfrei.
S.Lott
@ DisgrunteldGoat: vergiss das. Sie müssten von einer bestimmten Sprache ausgehen, und ich spreche nur 5. Alle anderen Sprachen wären genauso verloren wie Sie auf Niederländisch.
Joris Meys
Zu Absatz 2: Natürlich können Sie. Nehmen Sie alle aktuellen Sprachen, die Kommentarunterstützung bieten, und entfernen Sie Kommentarunterstützung. Wenn diese Sprachen Kommentare benötigen, befinden sie sich entweder im kompilierten Code oder der Interpreter ignoriert sie.
Kit
1

Undisziplinierte Programmierer schreiben schlechten Code, egal in welcher Sprache.

Es ist faszinierend, dass Python, das nur nach Konvention privat ist (_-Präfix), keine Anstrengungen unternimmt , um dies zu überwachen, und es wird noch viel feiner Code geschrieben.

Rant: Manchmal denke ich, dass freizügigere Sprachen mehr Leute dazu zwingen , richtig zu programmieren als umgekehrt (dh Java ist nur in eine Richtung und verdammt, wenn Sie sich Funktionen als erstklassige Objekte vorstellen wollen).

Macke
quelle
1

Ich werde raten: wahrscheinlich nicht. Warum? Weil Sie das "Warum" als Formalismus in der Sprache und das "Warum" verschlüsseln müssten, ob in Sprache oder Kommentar-in-Sprache, wird von Programmierern sowieso nicht ausreichend genutzt.

Kit
quelle
1

Code kann sich zwar selbst kommentieren, um zu erklären, was er tut, aber es ist nicht immer möglich, dass Code erklärt, warum er es tut. Hier sind Kommentare am dringendsten erforderlich.

Wenn zum Beispiel ein Codeabschnitt benötigt wird, um einer bestimmten Vorschrift zu entsprechen, wie erklären Sie dies ohne Kommentar? Wenn der von einem bestimmten Codeteil verwendete Algorithmus in einem Artikel von M. Matsumoto und T. Nishimura aus dem Jahr 1998 beschrieben ist, wie erklären Sie das ohne Kommentar? Wenn ein Algorithmus nicht genau die optimale Funktionalität bietet, aber einen sehr spezifischen, gerechtfertigten Kompromiss eingeht, der bei Änderungen an anderem Code zu zukünftigen Problemen führen kann, wie erklären Sie dies ohne Kommentar?

Was passiert, wenn ein Codeabschnitt von einem unabhängigen Prüfer geprüft wurde und daher nicht geändert werden kann, ohne dass diese Prüfung ungültig wird, und der Code zum Erstellen eines Produkts verwendet wird, dessen Konformität mit dieser Prüfung von Ihren Kunden gefordert wird. Wie deuten Sie das kommentarlos an?

David Schwartz
quelle
0

Ich habe immer gedacht, dass es schön sein könnte, einen Ein-Wort-Kommentar zu haben, damit dieses Wort ignoriert wird, wenn Sie einem Wort ein Symbol voranstellen (sagen wir einen Doppelpunkt). Auf diese Weise hätte man sagen können, dass ein S-Ausdruck nur aus einem Wort bestehende Kommentare enthält. Zum Beispiel könnten Sie dies drehen:

(if (= x y)
    x
    y)

...das mögen:

(if (= x y)
    :then x
    :else y)

Wenn Sie unbedingt müssen, können Sie mehrere Ein-Wort-Kommentare zu einem Inline-Kommentar verketten:

(if x :Remember, :x :could :be :nil!
    ...)

Natürlich ist das ein Tippfehler. Tatsächlich ist das der Punkt. Es empfiehlt sich, Inline-Kommentare sparsam zu verwenden und kurz und sachlich zu halten. Aber ich habe das Gefühl, dass ich Schwierigkeiten haben würde, jemanden davon zu überzeugen, die Sprache zu benutzen.

Jason Baker
quelle
Es erschwert auch das Lesen, was die Verwendung von Kommentaren überflüssig macht, um den Code besser lesbar zu machen.
Nate CK
0

Das ist doppelt oder gar nichts. Einige Programmierer tun nichts, um den Code lesbar zu machen. Wenn Sie keine Kommentare zulassen, wird dies noch verstärkt. Einige Programmierer schreiben gute Kommentare, selbst wenn sie noch besser wären, wenn sie Code-Refactoring anstelle von Kommentaren durchführen würden. Das Entfernen von Kommentaren kann sie dazu zwingen, das Refactoring zu verbessern.

Gründe, warum dies eine gute Idee ist: - Keine

Gründe , warum dies eine schlechte Idee ist: - Es gibt viele weitere atrocious Programmierer als gut , aber-nicht-großen Programmierer - Es sollte fast immer einige Kommentare zu seltsam gotchas, Zusammenfassungen, etc. - Auch wenn Sie Kommentare vermeiden, werden Sie wahrscheinlich verwenden Kommentare als Bühne auf dem Weg: Geben Sie einen Kommentar ein, wenn Sie etwas schreiben, und kehren Sie dann zurück und überarbeiten Sie es. Aber Sie können es nicht immer sofort richtig machen, weil Sie noch lernen. - Es wird die Leute ermutigen, es zu umgehen - Wer würde es benutzen? Leute, die unlesbaren Code schreiben und eine Ausrede (schlecht) wollen, und Leute, die sich schon für die Idee begeistern (die einfach "keine Kommentare schreiben" können). Wenn Sie dies wünschen, schreiben Sie einfach einen Kodierungsstandard, der zeigt, wie die Leute es tun sollen.

Gründe, aus denen dies relevant sein kann - Wenn es nützlich sein könnte, ist es Teil eines Systems, das "Nichtkommentieren" zu verbessern, z. Eine Sprache oder IDE, die etwas Besseres als Kommentare unterstützt und als Teil ihrer Tonhöhe Kommentare meidet. Ich weiß nicht, wie es funktionieren würde, aber es ist ein guter Punkt, über den man sich zumindest Gedanken machen sollte.

Jack V.
quelle