Magic Literal

Aus Programmieren-Wiki
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 2 annotiert und ab Blatt 3 abgezogen wird. 🤓

Beschreibung

Als 'Magic Literal' bezeichnen wir einen Wert (z.B. Zeichenkette oder eine Zahl), die einen konstanten Wert darstellt, jedoch im Quelltext nicht als Konstante definiert wurde (Erinnerung: Klassenkonstanten werden mit *private static final* angeführt).

Es sei zu beachten, dass es für ein Literal ausreicht, einem konstanten Attribut zugewiesen zu sein, um nicht mehr als Magic Literal zu gelten. Konstante Attribute von Literalen sollten jedoch auch immer static sein (Statische Methoden und Attribute). Ebenso ist es, wie sonst auch, wichtig die Konstante sinnvoll zu benennen (Bedeutungslose Konstanten).

Einzige Ausnahme bildet das Literal 0, wenn dieses im Rahmen der Initialisierung einer üblichen for-Schleife verwendet wird. for (int i = 0; i < ...) kann also ohne das Einführen einer Konstanten geschrieben werden.


Einfacher gesagt: Wir reden von "Magic Numbers", wenn im Quellcode Zahlen herumfliegen. Was heißt das? Konkret bedeutet das, dass eine Variable mit einem Wert deklariert wurde, der sich niemals ändern kann und wird - eine konkrete Zahl. Würde man jetzt etwas im Quellcode ändern wollen, was voraussetzt, dass wir überall im Programm zum Beispiel nicht mehr durch 2, sondern durch 3 teilen sollen, müsste man das überall händisch ändern. Das kostet Zeit, Nerven und man stelle sich vor, man findet nicht alle. Besser wäre also, Zahlen als Konstante/Variable zu deklarieren. Wenn wir diese Konstante/Variable jetzt ändern wie in unserem Beispiel, müssten wir nur einmal eine 2 durch eine 3 ersetzen, sodass das Programm genau das macht, was wir wollen. Es ist also schneller und vor allem viel weniger Arbeit. Das gilt auch für Zeichenketten. Technisch gesehen sind "Magic Numbers" nicht auf Zahlen beschränkt. Auch Zeichenketten, die die o.g. Charakteristik erfüllen, sind "Magic Numbers" (oder dann eben "Magic Strings").

Das untenstehende Beispiel befasst sich mit 'Magic Numbers'. Analog gilt die Richtlinie bzw. Regel aber auch für die restlichen 'Magic Literals'.


Negativbeispiel

final String password = "Test";
if (password.length() < 8) {    
    System.err.println("Password too short, please choose a longer password!");
}

Positivbeispiel

final String password = "Test";
final int minimalPasswordLength = 8;
if (password.length() < minimalPasswordLength) {    
    System.err.println(PASSWORD_ERROR_MESSAGE);
}


Wenn du diese Seite interessant fandest, findest du hier noch mehr Seite(n) dazu:
Bedeutungslose KonstantenKonstanten-KlasseStatische Methoden und Attribute