Wenn Sie den allerersten Satz der Frage lesen, ist es sehr klar, dass es bei dieser Frage nicht um angemessene Verwendungen wie das
Eliminieren magischer Zahlen geht , sondern
bestenfalls um schrecklich sinnlose, dumme Konsistenz. Welches ist, was diese Antwort adressiert
Der gesunde Menschenverstand sagt Ihnen, dass Sie Ihrem System nur Wartung und Komplexität hinzufügen const char UPPER_CASE_A = 'A';
oder const char A = 'A'
nicht. const char STATUS_CODE.ARRIVED = 'A'
ist ein anderer Fall.
Konstanten sollen Dinge darstellen, die zur Laufzeit unveränderlich sind, aber möglicherweise in Zukunft zur Kompilierungszeit geändert werden müssen. Wann wäre const char A =
etwas anderes als richtig gleich A
?
Wenn Sie public static final char COLON = ':'
in Java-Code sehen, suchen Sie denjenigen, der das geschrieben hat, und brechen Sie seine Tastaturen. Sollte sich die Darstellung für COLON
immer ändern :
, haben Sie einen Wartungsalptraum.
Verschleierung:
Was passiert, wenn jemand es ändert, COLON = '-'
weil es dort, wo er es -
verwendet, überall einen braucht ? Werden Sie Komponententests schreiben, die grundsätzlich assertThat(':' == COLON)
für jede einzelne const
Referenz gelten, um sicherzustellen, dass sie nicht geändert werden? Nur damit jemand den Test repariert , wenn er ihn ändert?
Wenn jemand tatsächlich argumentiert, dass dies public static final String EMPTY_STRING = "";
nützlich und nützlich ist, haben Sie nur sein Wissen qualifiziert und ignorieren es sicher bei allen anderen.
Jedes druckbare Zeichen, das mit einer benannten Version verfügbar ist, zeigt nur, dass jeder, der es getan hat, nicht dazu qualifiziert ist, Code unbeaufsichtigt zu schreiben.
Zusammenhalt:
Es verringert auch künstlich den Zusammenhalt, weil es die Dinge von den Dingen entfernt, die sie benutzen und mit ihnen in Beziehung stehen.
In der Computerprogrammierung bezieht sich Kohäsion auf den Grad, zu dem die Elemente eines Moduls zusammengehören. Kohäsion misst also die Stärke der Beziehung zwischen Teilen der Funktionalität innerhalb eines bestimmten Moduls. Beispielsweise ist in stark zusammenhängenden Systemen die Funktionalität stark miteinander verbunden.
Kupplung:
Es werden auch viele nicht verwandte Klassen zusammengekoppelt, da sie alle auf Dateien verweisen, die nicht wirklich mit dem zusammenhängen, was sie tun.
Enge Kopplung liegt vor, wenn eine Gruppe von Klassen stark voneinander abhängig ist. Dieses Szenario tritt auf, wenn eine Klasse zu viele Aufgaben übernimmt oder wenn ein Anliegen auf mehrere Klassen verteilt ist, anstatt eine eigene Klasse zu haben.
Wenn Sie einen gebrauchten besseren Namen wie DELIMITER = ','
würden Sie immer noch das gleiche Problem haben, weil der Name generisch ist und trägt keine semantische. Wenn Sie den Wert neu zuweisen, können Sie lediglich nach dem Literal suchen und es ersetzen, um eine Auswirkungsanalyse durchzuführen ','
. Denn was wird von etwas Code benutzt und braucht der ,
und ein anderer Code braucht es aber ;
jetzt? Muss noch jede Verwendung manuell überprüfen und ändern.
In der Wildnis:
Ich habe kürzlich eine 1,000,000+ LOC
Anwendung überarbeitet , die 18 Jahre alt war. Es hatte Dinge wie public static final COMMA = SPACE + "," + SPACE;
. Das ist auf keinen Fall besser, als nur dort einzufügen, " , "
wo es gebraucht wird.
Wenn Sie die Lesbarkeit diskutieren möchten, müssen Sie lernen, Ihre IDE so zu konfigurieren, dass whitespace
Zeichen dort angezeigt werden , wo Sie sie sehen können, oder was auch immer. Dies ist nur ein äußerst fauler Grund, Entropie in ein System einzuführen.
Es wurde auch ,
mehrmals mit mehreren Rechtschreibfehlern des Wortes COMMA
in mehreren Paketen und Klassen definiert. Mit Verweisen auf alle Variationen, die im Code miteinander vermischt sind. Es war geradezu ein Albtraum, etwas zu reparieren , ohne etwas völlig anderes zu zerbrechen.
Gleiche mit dem Alphabet, gab es mehr UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
dass die meisten der Zeit gleich waren , A
aber in einigen Fällen waren nicht . Für fast jeden Charakter, aber nicht für alle Charaktere.
Und aus der Editierhistorie ging hervor, dass in den letzten 18 Jahren kein einziger dieser Artikel bearbeitet oder geändert wurde. Der Grund dafür ist, dass viel zu viele Dinge zerstört wurden, die nicht nachvollziehbar waren. Sie haben also eine neue Variable Namen, die auf dasselbe verweisen und niemals aus demselben Grund geändert werden können.
In keiner vernünftigen Realität kann man behaupten, dass diese Praxis nichts anderes tut, als mit maximaler Entropie zu beginnen.
Ich habe all dieses Durcheinander überarbeitet und all die Tautologien hervorgehoben, und die neuen College-Angestellten waren viel produktiver, weil sie nicht durch mehrere Indirektionsebenen jagen mussten, auf die diese const
Referenzen tatsächlich hinwiesen, weil sie in dem, was sie nannten, nicht zuverlässig waren vs was sie enthielten.