Tach!
Ja, dass ein Literal und eine Konstante jeweils unveränderliche Werte haben, ist ihre Gemeinsamkeit. Man darf das aber durchaus namentlich und funktional auseinanderhalten, der Compiler tut es ja auch.
tut er das wirklich? Ein typischer C-Compiler tut das beispielsweise nicht.
Hmm, sieht auch bei C# so aus. Da habe ich wohl const und readonly zusammengeworfen. readonly wird erst zur Laufzeit berechnet und wird dann wie eine Variable behandelt, ist also nur ein Vorkommen.
Ein Literal steht immer wieder neu im Kompilat, wann immer es auftaucht, eine Konstante wird nur einmal angelegt und dann immer wiederverwendet.
Ich gehe eigentlich davon aus, dass eine benannte Konstante überhaupt nirgends abgelegt wird, sondern vom Compiler überall dort in den Code eingesetzt wird, wo sie auftaucht.
PHP hat mittlerweile zwei Varianten: const und define. Da define zur Laufzeit berechnet wird, kann das nur ähnlich einer Variable verwendet werden. Mit const definiert kann der Wert direkt verwendet werden.
Und damit wäre der einzige Unterschied zwischen einem Literal und einer benannten Konstanten, dass letztere nur einmal zentral definiert und dann an beliebig vielen Stellen genutzt werden kann, während man Literal-Konstanten an jeder Verwendungsstelle einzeln pflegen muss.
Vor allem kann man sich sicher sein, dass bei der Verwendung von Konstanten die Werte dieselbe Bedeutung haben. Ein sprehcnder Name hilft beim Verstehen. Einem Literal sieht man das nicht an, ob zwei gleiche Literale dieselbe Bedeutung haben.
Letztlich ist es mir als Programmierer der Hochsprache meist egal, was der Compiler draus macht. Ich würde er trotzdem sprachlich auseinanderhalten wollen.
const newline = "\n";
"Die Konstante newline wird mit der Konstante "\n"
initialisiert" klingt seltsam. Inhaltlich besser: "Die Konstante newline wird mit dem Zeichen NL initialisiert, das als Literal "\n"
zu notieren ist." (Kann man sicher sprachlich schöner formuieren.)
dedlfix.