Der Gipfel dessen, was die anderen Antworten verstanden haben, ist nicht, dass "magische Werte" schlecht sind, sondern dass sie sein sollten:
- erkennbar als Konstanten definiert;
- innerhalb ihres gesamten Verwendungsbereichs nur einmal definiert werden (sofern architektonisch möglich);
- zusammen definiert, wenn sie eine Reihe von Konstanten bilden, die irgendwie miteinander verwandt sind;
- in der Anwendung, in der sie verwendet werden, auf einer angemessenen Ebene allgemein definiert werden; und
- so definiert werden, dass ihre Verwendung in unangemessenen Kontexten eingeschränkt wird (z. B. für die Typprüfung geeignet).
Was normalerweise akzeptable "Konstanten" von "magischen Werten" unterscheidet, ist ein Verstoß gegen eine oder mehrere dieser Regeln.
Konstanten erlauben es uns einfach, bestimmte Axiome unseres Codes auszudrücken.
Was mich zum Schluss bringt, dass eine übermäßige Verwendung von Konstanten (und damit eine übermäßige Anzahl von Annahmen oder Einschränkungen, die in Form von Werten ausgedrückt werden), auch wenn sie ansonsten die oben genannten Kriterien erfüllen (aber insbesondere wenn sie von diesen abweichen), Dies kann bedeuten, dass die zu entwickelnde Lösung nicht allgemein genug oder nicht gut strukturiert ist (und daher sprechen wir nicht mehr wirklich über die Vor- und Nachteile von Konstanten, sondern über die Vor- und Nachteile von gut strukturiertem Code).
Sprachen auf hoher Ebene haben Konstrukte für Muster in Sprachen auf niedrigerer Ebene, die Konstanten verwenden müssten. Die gleichen Muster können auch in der höheren Sprache verwendet werden, sollten es aber nicht sein.
Aber das kann ein Expertenurteil sein, das auf einem Eindruck aller Umstände beruht und wie eine Lösung aussehen sollte, und genau, wie dieses Urteil gerechtfertigt sein wird, wird stark vom Kontext abhängen. In der Tat kann es nicht nach einem allgemeinen Grundsatz gerechtfertigt sein, außer zu behaupten, "ich bin alt genug, um diese Art von Arbeit, mit der ich vertraut bin, schon besser gesehen zu haben"!
BEARBEITEN: Nachdem ich eine Bearbeitung akzeptiert, eine andere abgelehnt und jetzt meine eigene Bearbeitung durchgeführt habe, kann ich jetzt in Betracht ziehen, dass die Formatierung und der Interpunktionsstil meiner Regelliste ein für alle Mal festgelegt werden müssen, haha!