Bedeutungslose Konstanten
🚧 | Diese Seite befindet sich in Bearbeitung | 🚧 |
🤓 | Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 2 annotiert und ab Blatt 3 abgezogen wird. | 🤓 |
Beschreibung
Konstanten ermöglichen es, Konzepte explizit zu modellieren, die sonst nur durch ihre Werte repräsentiert werden. Deswegen sollten Konstanten immer nach dem Konzept und nicht dem Wert benannt werden. Eine Konstante public static final String COMMAND_KEYWORD_SEPARATOR = " ";
hat als Wert eine Zeichenkette, die nur ein Leerzeichen enthält. Deswegen sollte sie aber nicht SPACE
heißen, da dies nicht das unterliegende Konzept ist. Das Konzept, das hier modelliert wurde, ist das Trennzeichen für die Schlüsselworte eines Befehls. Während sich der Wert der Konstante in Zukunft (z.B. andere Darstellung des UIs) ändern kann, bleibt das Konzept gleich. Deswegen ist es auch möglich, dass mehrere Konstanten den gleichen Wert haben. Diese sollten aber aus Gründen der Wartbarkeit dennoch separate Konstanten sein, wenn sie verschiedene Konzepte modellieren.
Zahlen und Zeichenketten (Strings) die fest im Quellcode enthalten sind, sollen als Konstante im Kopf der Klasse deklariert werden.
Sämtliche Regelungen von oben gelten für Konstanten.
Negativbeispiel
public class Player {
private final static String FIVE = 5;
private final String name;
private int experience;
public Player(String name) {
this.name = name;
this.experience = 0;
}
public void addExperience(int experienceGained) {
this.experience += (FIVE * experienceGained);
}
}
FIVE besitzt in diesem Fall keine Bedeutung, da wir nicht wissen, wofür es stehen soll. Vergleichbar ist es mit dem weglassen der Einheiten in der Schule: "Fünf was..? Kartoffeln?". In der Methode können wir auch nicht erkennen, wofür die Konstante jetzt eigentlich gebraucht wird, beziehungsweise was sie tut. Und jetzt stellen wir uns mal vor, 5 wäre nicht mehr der korrekte Wert und wir müssten ihn umändern in eine 10. Hinter FIVE den Wert 10 zu "verstecken" wäre schrecklich, insbesondere wenn wir überall im Quellcode jetzt die Konstante von FIVE zu TEN umschreiben müssten... was ein Aufwand.
Positivbeispiel
public class Player {
private final static String EXPERIENCE_MODIFIER = 5;
private final String name;
private int experience;
public Player(String name) {
this.name = name;
this.experience = 0;
}
public void addExperience() {
this.experience += (EXPERIENCE_MODIFIER * experienceGained);
}
}
Hier wissen wir jetzt direkt für was unsere Konstante steht und können auch direkt in der Methode ablesen was passieren soll. Auch können wir den Wert abändern, ohne überall den Konstantennamen ändern zu müssen, es ist ja nachwievor klar, wofür die Konstante da ist.
Wenn du diese Seite interessant fandest, findest du hier noch mehr Seite(n) dazu:
Schlechter Bezeichner