Orlok: Aktuelles Datum als max in ein datums Eingabefeld

Beitrag lesen

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 = 4function 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 letdeklariert wurden, da eine andere Funktion den Wert jederzeit verändern könnte.

const y = 2function 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


  1. 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 mit const verändert werden. Es gibt allerdings die Möglichkeit, auch Objekte immutable zu machen, so dass die Aussage auf diesen Fall erweitert werden kann. ↩︎