Was ist die am wenigsten nützliche Kommentar, den Sie je gesehen haben? [geschlossen]

StackOverflow https://stackoverflow.com/questions/143429

  •  02-07-2019
  •  | 
  •  

Frage

Wir alle wissen, dass unser Code zu kommentieren ist ein wichtiger Bestandteil Art der Codierung unseren Code verständlich an die nächste Person für die Herstellung, die entlang kommt, oder sogar selbst in 6 Monaten oder so.

Aber manchmal ein Kommentar einfach nicht schneiden den Senf. Ich spreche nicht über offensichtliche Witze oder belüftete frustraton, ich spreche über Kommentare, die einen Erklärungsversuch zu sein scheinen zu machen, aber es tun so schlecht könnten sie auch nicht da sein. Kommentare, die sind zu kurz, sind zu kryptisch , oder sind einfach falsch .

Als cautonary Geschichte, könnte man etwas, das Sie haben gemeinsam gesehen, dass war wirklich nur so schlecht , und wenn es nicht offensichtlich ist, zeigen Sie den Code es sich bezog und darauf hinweisen, was mit ihm los ist ? Was sollte haben dort statt gegangen?

Siehe auch:

War es hilfreich?

Lösung

Nur die typische Comp Sci 101 Typ Kommentare:

$i = 0; //set i to 0

$i++; //use sneaky trick to add 1 to i!

if ($i==$j) { // I made sure to use == rather than = here to avoid a bug

Dergleichen.

Andere Tipps

Unfilled javadoc vorformulierten Kommentare sind besonders nutzlos. Sie verbrauchen vielen Bildschirm Immobilien ohne nützlich etwas beitragen. Und das Schlimmste daran ist, dass, wenn ein solcher Kommentar angezeigt wird, Hunderte von anderen sicher lauern hinter sich.

/**
 * Method declaration
 *
 *
 * @param table
 * @param row
 *
 * @throws SQLException
 */
void addTransactionDelete(Table table, Object row[]) throws SQLException {

Ich habe ich finde dieses kleine Juwel schreibt vor:

//@TODO: Rewrite this, it sucks. Seriously.

Normalerweise ist es ein gutes Zeichen, dass ich das Ende meiner Codierung Sitzung für die Nacht erreicht habe.

// remember to comment code

wtf? : D

So etwas wie folgt aus:

// This method takes two integer values and adds them together via the built-in
// .NET functionality. It would be possible to code the arithmetic function
// by hand, but since .NET provides it, that would be a waste of time
private int Add(int i, int j) // i is the first value, j is the second value
{
    // add the numbers together using the .NET "+" operator
    int z = i + j;

    // return the value to the calling function
    // return z;

    // this code was updated to simplify the return statement, eliminating the need
    // for a separate variable.
    // this statement performs the add functionality using the + operator on the two
    // parameter values, and then returns the result to the calling function
    return i + j;
}

Und so weiter.

Jeder Kommentar, der nur wiederholt, was der Code sagt, ist nutzlos. Kommentare sollten mir nicht sagen, was der Code tut. Wenn ich weiß nicht, die Programmiersprache gut genug, zu verstehen, was los ist nur den Code zu lesen, soll ich nicht, dass Code überhaupt zu lesen sein. Kommentare wie

// Increase i by one
i++;

sind völlig nutzlos. Ich sehe, dass ich um eins erhöht wird, das ist, was der Code sagt, ich brauche keinen Kommentar dazu! Kommentare sollten zu erklären, verwendet werden Warum etwas getan wird (in Fall ist es bei weitem nicht offensichtlich ist) oder Warum etwas so gemacht wird und nicht anders (so kann ich versteht bestimmte Design-Entscheidungen ein anderer Programmierer gemacht, die bei weitem nicht offensichtlich sofort sind). Weitere Kommentare sind nützlich heikel Code zu erklären, wo es absolut nicht möglich ist, zu bestimmen, was einen schnellen Blick auf den Code vor sich geht, indem er (zum Beispiel gibt es knifflig Algorithmen, um die Anzahl von Bits in einer Reihe gesetzt zu zählen, wenn Sie nicht tun wissen, was dieser Code tut, Sie haben keine Chance, zu erraten, was dort vor sich geht).

Thread.Sleep(1000); // this will fix .NET's crappy threading implementation

Ich habe einmal an einem Projekt mit einem seltsamen C-Compiler. Es gab einen Fehler in einem gültigen Stück Code, es sei denn ein Kommentar zwischen zwei Aussagen eingefügt wurde. Also änderte ich den Kommentar zu:

// Do not remove this comment else compilation will fail.

Und es hat super funktioniert.

Ich glaube es nicht. Ich kam in diese Frage, nachdem es 22 Antworten hatte, und niemand zeigte die geringste möglicherweise nützliche Art von Kommentar aus:

Kommentare, die falsch sind.

Es ist schlimm genug, dass die Menschen überflüssig Kommentare schreiben, die von Verständnis Code in der Quere kommen, aber wenn jemand schreibt einen ausführlichen Kommentar zu erklären, wie etwas funktioniert, und es ist entweder falsch an erster Stelle, oder falsch, nachdem der Code geändert wurde ohne Änderung Kommentar (viel wahrscheinliches Szenario), das ist definitiv die schlimmste Art von Kommentar.

GhostDoc kommt mit einem paar ziemlich interessant denjenigen auf seinem eigenen auf.

/// <summary>
/// Toes the foo.
/// </summary>
/// <returns></returns>
public Foo ToFoo()
// secret sauce
// Don't know why we have to do this
try
{
...some code...
}
catch
{
// Just don't crash, it wasn't that important anyway.
}

* seufz

Ich stieß auf eine einmal-Datei. Tausende von Codezeilen, die meisten davon ziemlich horrend. Badly benannten Variablen, in der Mitte der Datei begraben knifflige conditionals auf Loops und einen Kommentar.


   /* Hmmm. A bit tricky. */
//' OOOO oooo that smell!! Can't you smell that smell!??!??!!!!11!??/!!!!!1!!!!!!1

If Not Me.CurrentMenuItem.Parent Is Nothing Then
    For Each childMenuItem As MenuItem In aMenuItem.Children
        do something
    Next

    If Not Me.CurrentMenuItem.Parent.Parent Is Nothing Then
        //'item is at least a grand child
        For Each childMenuItem As MenuItem In aMenuItem.Children
            For Each grandchildMenuItem As MenuItem In childMenuItem.Children
                do something
            Next
        Next

        If Not Me.CurrentMenuItem.Parent.Parent.Parent Is Nothing Then
            //'item is at least a grand grand child
            For Each childMenuItem As MenuItem In aMenuItem.Children
                For Each grandchildMenuItem As MenuItem In childMenuItem.Children
                    For Each grandgrandchildMenuItem As MenuItem In grandchildMenuItem.Children
                        do something
                    Next
                Next
            Next

        End If
    End If
End If

Standard Kommentare eingefügt durch IDEs.

Das letzte Projekt, das ich an dem gearbeitet verwendet WebSphere Application Developer hatte viel Wartung Entwickler und Auftragnehmer, die nicht durch die Hunderte gestört zu werden schien, wenn nicht Tausende von Java-Klassen, die Leute wie diese enthalten:

/**
 * @author SomeUserWhoShouldKnowBetter
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */

Es war immer, dass in Sekundenbruchteilen zwischen Denken Sie würden gefunden tatsächlich eine gut kommentierte Quelldatei und zu realisieren, dass, yup, es ist eine andere Standardkommentar, die Sie gezwungen SWEAR_WORD_OF_CHOICE zu verwenden.

Ich sah diesen Kommentar gestern in einem C # app:

//TODO: Remove this comment.

Mein Lieblingsallzeit Kommentar.

/* our second do loop */
do {

Wer auch immer es geschrieben -. Sie wissen, wer Sie sind

eine sehr große Datenbank-Engine-Projekt in C vor vielen vielen Jahren - Tausende von Codezeilen mit kurzen und Variablennamen falsch geschrieben, und keine Kommentare ... bis Weg tief in verschachtelten if-Bedingungen mehrere tausend Zeilen in das Modul die folgender Kommentar erschienen:

//if you get here then you really f**ked

nach dieser Zeit, ich glaube, wir wussten, dass bereits!

In einer riesigen VB5 Anwendung

dim J
J = 0 'magic
J = J 'more magic
for J=1 to 100
...do stuff...

Der Verweis offensichtlich ist THIS ... und ja, die Anwendung ohne diese beiden Linien nicht zur Laufzeit mit einem unbekannten Fehlercode. Wir wissen immer noch nicht, warum.

Genommen von einer meiner Blog-Beiträge :

  

Im Prozess ein Teil des Quellcodes sich für eines der Projekte der Reinigung Ich schaffe ich über die folgenden Anmerkungen kamen:

/*
   MAB 08-05-2004: Who wrote this routine? When did they do it? Who should 
   I call if I have questions about it? It's worth it to have a good header
   here. It should helps to set context, it should identify the author 
   (hero or culprit!), including contact information, so that anyone who has
   questions can call or email. It's useful to have the date noted, and a 
   brief statement of intention. On the other hand, this isn't meant to be 
   busy work; it's meant to make maintenance easier--so don't go overboard.

   One other good reason to put your name on it: take credit! This is your
   craft
*/

und dann ein wenig weiter unten:

#include "xxxMsg.h" // xxx messages
/*
   MAB 08-05-2004: With respect to the comment above, I gathered that
   from the filename. I think I need either more or less here. For one
   thing, xxxMsg.h is automatically generated from the .mc file. That might
   be interesting information. Another thing is that xxxMsg.h should NOT be
   added to source control, because it's auto-generated. Alternatively, 
   don't bother with a comment at all.
*/

und dann noch einmal:

/*
   MAB 08-05-2004: Defining a keyword?? This seems problemmatic [sic],
   in principle if not in practice. Is this a common idiom? 
*/

AHHHRRRGGHHH gefunden Genau dies in einigen alten Code, wette, der Mann dachte, er war ziemlich lustig

private
  //PRIVATE means PRIVATE so no comments for you
  function LoadIt(IntID: Integer): Integer;

Der schlimmste Kommentar ist eine, die eine falsche Erklärung gibt, was den Code tut. Das ist schlimmer als gar kein Kommentar überhaupt.

Ich habe diese Art der Sache in Code gesehen mit viel zu vielen Kommentaren (das nicht da sein sollte, da der Code klar genug ist, um auf eigenem), und es passiert meist, wenn der Code aktualisiert (Refactoring, geändert, etc.), aber die Kommentare sind damit nicht mehr aktualisiert entlang.

Eine gute Daumenregel ist:. Nur Kommentare schreiben zu erklären Warum Code tut etwas, nicht was es funktioniert

Müsste definitiv Kommentare, die anstelle der Fehlerbehandlung stehen.

if(some_condition){
    do_stuff();
}
else{
    //An error occurred!
}

Ich habe gerade diese, auf der Linie vor einer kommentierten-out Codezeile geschrieben:

//This causes a crash for some reason. I know the real reason but it doesn't fit on this line.

100k LOC-Anwendung, die von VB6 zu vb.net portiert wurde. Es sieht aus, als ob ein vorhergehender Entwickler einen Kommentar Header auf einem Verfahren gestellt hatte und dann kopiert und eingefügt den genauen Kommentar auf jede Methode, die er von da an schrieb. Hunderte von Methoden und jeder falsch kommentiert ...

Als ich es sah, ich lachte ... 6 Monate später wurde der Witz trägt dünn.

Dies ist ein absolut reales Beispiel aus einem Datenbank-Trigger:

/******************************************************************************
   NAME:       (repeat the trigger name)
   PURPOSE:    To perform work as each row is inserted or updated.
   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        27.6.2000             1. Created this trigger.
   PARAMETERS:
   INPUT:
   OUTPUT:
   RETURNED VALUE:
   CALLED BY:
   CALLS:
   EXAMPLE USE:
   ASSUMPTIONS:
   LIMITATIONS:
   ALGORITHM:
   NOTES:
******************************************************************************/
/** function header comments required to pass checkstyle */

Die beiden nicht hilfreich Kommentare, die ich je gesehen habe ...

try
{
  ...
}
catch
{
  // TODO: something catchy
}

Ich stellte diese ein bei der Daily WTF auch, also werde ich es trimmen, um nur den Kommentar ...

  // TODO: The following if block should be reduced to one return statememt:
  // return Regex.IsMatch(strTest, NAME_CHARS);
  if (!Regex.IsMatch(strTest, NAME_CHARS))
    return false;
  else
    return true;

Ein Ich habe noch nie sehr hilfreich:

<!--- Lasciate ogne speranza, voi ch'intrate --->
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top