Hallo Gunnar
Es gibt möglicherweise Situationen, in denen die Verwendung von const
Optimierungen zulässt, die mit let
nicht möglich wären. Grundsätzlich ist aber davon auszugehen, dass heutige Ausführungsumgebungen genug Codeanalyse betreiben um in den meisten Fällen zu erkennen, ob eine deklarierte Variable wie eine Konstante behandelt werden kann oder nicht. Es würde mich daher wundern, wenn es hinsichtlich der Performanz merkliche Unterschiede gäbe.
Zwischen let
und const
wird im Wesentlichen deshalb unterschieden, weil es den Code ausdrucksstärker und damit besser lesbar macht, was im besten Fall der Programmiererin dabei hilft, Fehler zu vermeiden oder sie wenigstens schneller und leichter zu erkennen. In jedem Fall vereinfacht es das mentale Modell, dass man sich von einem Programm macht, da bestimmte Möglichkeiten nicht mehr berücksichtigt werden müssen.
let x = 4
⋮
function f(a) {
return a * x // Wert von x ist vielleicht 4
}
In einem Programm mit Funktionen, die wie in dem Beispiel oben über freie Variablen verfügen, kann ich ohne Kenntnis der gesamten Umgebung keine sicheren Aussagen darüber treffen, welcher Wert bei einem Aufruf zurückgegeben wird, wenn die Variablen wie hier mit dem Schlüsselwort let
deklariert wurden, da eine andere Funktion den Wert jederzeit verändern könnte.
const y = 2
⋮
function g(a) {
return a * y // Wert von y ist sicher 2
}
Wird const
für eine Deklaration verwendet, kann ich hingegen sicher sein, dass zur Laufzeit kein anderer Wert an den entsprechenden Bezeichner gebunden wird. Die Funktion in diesem Beispiel besitzt zwar eine freie Variable, aber sie ist dennoch referenziell transparent, da die referenzierte Variable unveränderbar ist. Das Ergebnis eines Aufrufs ist nur von dem an die Funktion übergebenen Argument abhängig. Es ist in diesem Fall also möglich, Aussagen über das Programm zu treffen, die andernfalls nicht ohne Weiteres möglich wären.[1]
Nun könnte man natürlich argumentieren, dass es bei lokalen Variablen wie in Rolfs Codebeispiel keine Rolle spielt, ob let
oder const
verwendet wird, da die Auswirkungen auf einen sehr kleinen und überschaubaren Bereich des Programms begrenzt sind. Wenn man den Abschnitt isoliert betrachtet, ist dieser Argumentation auch nicht zu widersprechen.
Ein Programm besteht aber selten nur aus einem Abschnitt und angenommen es würde sonst der Konvention gefolgt, die Absicht der erneuten Zuweisung durch die entsprechende Wahl der Schlüsselwörter const
und let
kenntlich zu machen, dann würde sich dem Leser doch die Frage stellen, warum an einer bestimmten Stelle davon kein Gebrauch gemacht wurde. Das wäre dann eine unnötige Ablenkung, die dem eigentlichen Zweck der Konvention zuwiderliefe.
Ich stimme dir also zu, dass es sinnvoll ist, auch in solchen Fällen diejenige Variante zu wählen, welche die Absichten des Autors am besten verdeutlicht.
Viele Grüße,
Orlok
Allgemein gilt dies aber nur unter der Einschränkung, dass mit der freien Variable wie in dem Beispiel ein skalarer Wert verknüpft ist, da
const
lediglich dafür sorgt, dass die Bindung zwischen Wert und Bezeichner unveränderbar ist. Handelt es sich bei dem Wert um eine Referenz auf ein Objekt, dann kann dieses Objekt trotz der Deklaration mitconst
verändert werden. Es gibt allerdings die Möglichkeit, auch Objekte immutable zu machen, so dass die Aussage auf diesen Fall erweitert werden kann. ↩︎