Hier noch das, was ich vor >1 Monat noch geschrieben und dann wieder rauseditiert hatte (jetzt können die Flamewars ja ruhig ein bißchen angeheizt werden :D)
Ich frage mich manchmal, ob Leute “Kommentare” schreiben, um behaupten zu können, sie hätten Kommentare geschrieben, ohne zu lügen. Gerade habe ich mal (abgesehen von einigen Namen unveränderten) Code aus aus meiner IDE hier kopiert:
// label
setLabel(node, resultNode);
// transform
Matrix matrix = setTransform(node, instance, resultNode, scale, globalTransform);
// bounding box
setBoundingBox(node, instance, resultNode, scale, matrix);
// metadata
processMetadata(node, resultNode);
(Das muss man wohl nicht weiter kommentieren…)
Ich gebe ja zu, dass ich ein Kommentar-Nazi bin, und für ALLES (ALLES) JavaDoc-Kommentare erstelle. Natürlich kommt da dann manchmal “Noise” raus, den man zumindest hinterfragen, und meinetwegen auch als “schlecht” bezeichnen kann…
class Person
{
/**
* The last name of this person
*/
private String lastName;
/**
* Returns the last name of this person
*
* @return The last name of this person
*/
public String getLastName()
{
return lastName;
}
/**
* Set the last name of this person
*
* @param lastName The last name of this person
*/
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}
statt
class Person
{
private String lastName;
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}
Aber wenn mir mal langweilig ist, oder ich müde bin und nicht über was “richtiges” nachdenken will, dann schreibe ich halt noch
/**
* Returns the last name of this person. This will
* never be <code>null</code>, and will never be
* an empty string. Oder was auch immer.
*
* @return The last name of this person
*/
dazu.
Diese JavaDoc/Interface-Kommentare sind aber IMHO eine komplett andere Kategorie (und IMHO komplett unabhängig) von “inline-Kommentaren”. Darüber, ob letztere “gut” oder “schlecht” sind, wurde schon ausführlich diskutiert. Manche bezeichnen die als “Code Smell”. Ich denke, wenn man darüber reden will, muss man ausdifferenzieren, zwischen Kommentaren, die das “WAS” beschreiben, und Kommentaren, die das “WARUM” beschreiben. Letztere wird man wohl kaum in Frage stellen können - willkürliches Beispiel aus etwas, was ich kürzlich gemacht habe:
// Some glTF files have single values instead of arrays,
// so accept this for compatibility reasons
objectMapper.configure(
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Gegen Kommentare, die das “WAS” beschrieben, im Sinne von Blöcken wie
// Set stuff up
int i = init();
setUp(i);
start();
// Do this and that
float that = doThat(i);
performAnd(this, that);
// Clean up
delete(this);
clear(that);
shutDown();
wird oft argumentiert, dass man das in Methoden auslagern sollte. Aber ich finde, es gibt auch Argumente, die dagegen sprechen, 5 Zeilen Code in eine Methode zu packen, wenn die Methode privat wäre, nur an einer Stelle verwendet würde, und ggf. mehrere Parameter übergeben bekommen müßte (und… wie das bei Methoden eben so ist: Auch einen JavaDoc-Kommentar bräuchte :D)