Wählen Sie, wie Sie ES6 const und let besser nutzen können

9

Disclaimer: Ich weiß, dass die folgende Frage als "nach Meinungen fragen" gesehen werden könnte (also wäre es nicht Thema).
Aber das ist nicht der Fall: Ich suche nach Vor- und / oder Nachteilen facts , die berücksichtigt werden sollten, wenn man darüber nachdenkt.

Zufällig lese ich gerade (aus dem ausgezeichneten Exploring ES6 ) einen Ausschnitt, der sich auf const vs let vs var , wo die Schlussfolgerung besagt (Fettdruck gehört mir):

  

Dann haben wir zwei Ansätze:

     
  1. Bevorzugt const : const markiert unveränderliche Bindungen .
  2.   
  3. Bevorzugt let : const markiert unveränderliche Werte .
  4.   

Ich lehne mich etwas zugunsten von # 1, aber # 2 ist auch in Ordnung.

Was mich verwirrt ist: Diese Präferenz scheint auf der tiefen technischen Bedeutung des daraus resultierenden Unterschieds zwischen den beiden Ansätzen zu beruhen, als ob der Autor sich im Wesentlichen darüber auslässt, wie der Code funktioniert auf niedriger Ebene .

Aber ich fühle mich auch (und vielleicht zuerst!) vom Lesbarkeitsaspekt betroffen: Unter diesem Gesichtspunkt erscheint # 2 besser, den Code semantisch signifikant zu machen darüber, was mit den verarbeiteten Daten passiert.

Aber vielleicht verpasse ich einige Vorteile der # 1 Wahl ...?

BEARBEITEN, indem Sie die vorgeschlagene Verknüpfung als Duplikat nutzen: Warum sollte ich in den meisten Fällen const anstelle von Javascript verwenden?

In der Tat macht die akzeptierte Antwort auf diese Frage die Dinge tatsächlich so sichtbar, dass sie mich eher zu meiner früheren Sichtweise macht, d. h. # 2 ist besser als # 1.

BTW: Ich habe festgestellt, dass meine Frage wahrscheinlich nicht so klar war, wie es sollte, daher hier eine detailliertere Formulierung:

  • Ich bin mir (AFAIK) der technischen Unterschiede zwischen const und let ziemlich bewusst, also fragt meine Frage nichts darüber.
  • Der einzige Punkt wirklich der durch die Wahl zwischen # 1 und # 2 involviert ist, liegt in der Verwendung von const für jedes unveränderliche Objekt Der Inhalt kann geändert werden!) vs nur für eingefrorene Objekte .

Es ist dort, dass ich überrascht bin, dass der Autor # 1 bevorzugt, da (aus meiner Sicht) es eher irreführend ist.
Die häufigste Art der Verwendung von Objekten besteht darin, dass sich ihr Inhalt während des Prozesses ändert, also const auf ihrer Deklarationsebene lesen, wenn # 1 verwendet wird:

  • Im besten Fall wissen wir nicht, was mit ihm passieren soll.
  • Im schlimmsten Fall können wir uns vorstellen, dass sich sein Inhalt niemals ändert, solange er es kann!

Auf der anderen Seite können wir bei Verwendung von # 2 darauf vertrauen, dass sich ein const -deklariertes Objekt nicht ändert (abgesehen von Aufsicht und / oder Bug).

Um auf meine Frage zurückzukommen: Da die obige Reflexion eindeutig dazu führt, # 2 zu wählen, frage ich mich, welchen Punkt ich verpasst habe, was den Autor dazu bringt, # 1 zu bevorzugen.

    
cFreed 25.12.2016, 06:20
quelle

1 Antwort

7

Um mit Ihrer Suche nach Fakten Schritt zu halten, vermeide ich es, Meinungen zu äußern und meine Antwort in objektiven, einfachen Worten zu beschreiben.

Die Präferenz des Autors basiert nicht auf "tiefer technischer Bedeutung", da die Signifikanz eigentlich eher flach ist: Kurz gesagt besteht der einzige Unterschied zwischen den beiden Schlüsselwörtern darin, dass eine const Variable nicht sein kann neu zugewiesen , aber eine lassen Variable kann.

Die Absicht der Präferenz # 1 besteht darin, const in der spezifischen Weise zu verwenden, in der sie definiert wurde, um zu verhindern, dass eine Variable auf eine neue Zuweisung verweist.

Die Absicht der Präferenz # 2 ist vorzugeben (oder act ) wie jeder RHS-Wert, der eine Variable const initialisiert, ist unveränderlich, was erfordert Bemühung der Entwickler, dies zu wissen und entsprechend zu handeln.

Ein Nachteil von # 2 ist, dass es eine Konvention für die Kodierung mit const einführt, die nicht mit seiner eigentlichen Funktion übereinstimmt, so dass es hauptsächlich um Kodierungsstandards und Codepflege geht. Mit anderen Worten, wenn ein Entwicklerteam vorschreibt, dass const nur für unveränderliche Deklarationen verwendet werden soll, macht es den Code leichter verständlich, dass solche Werte nicht geändert werden sollten, aber es ist tatsächlich nicht der Fall, dass sie nicht geändert werden können. (Wenn diese Konvention eingehalten werden sollte, wäre es sinnvoll, const nur für Werte zu verwenden, die tatsächlich unveränderbar sind, z. B. mit Object.freeze() .)

Der Vorteil von # 1 ist, dass Sie const so verwenden, wie es entworfen wurde: Sie behandeln solche Variablen so, als ob ihre Zuweisung nicht geändert werden könnte, nicht const bietet etwas, das es nicht bietet (dh, Unveränderlichkeit), also gibt es keine Möglichkeit für Entwickler, den Inhalt eines const Objekts, das sie vorgeben wollen, nicht zu ändern.

    
Rommel Santor 25.12.2016 11:57
quelle

Tags und Links