2016-07-20 12 views
0

Ich habe diese Funktion bekam einmal ein Kollege geschrieben hat:Gibt es einen Grund zum "Speichern" von Variablen?

setSentence: function (e) { 
    this.setState({ 
    issueText: e.target.value 
    }); 

    if (this.refs.messages.textContent.length > 0 && e.target.value.length > 2) { 
    this.refs.messages.textContent = ''; 
    } 
}, 

Er e.target.value an zwei Stellen im Code verwendet. Ich würde dazu neigen, etwas in der Art zu machen:

let textBoxContent = e.target.value; 

Dann verwenden Sie stattdessen die Variable mit dem beschreibenden Namen.

Ich habe einmal mit ihm über diese Vermeidung Variablen-Ding gesprochen. Er sagte nur, dass er "Variablen speichern möchte".

möchten diese Code-Teile ändern, aber ich bin noch nicht sicher ...

So also meine Frage:

Does bzw. Vermeidung von Variablen im Code „Variablen speichert“ macht keinen Sinn ?

+0

"Speichern von Variablen" klingt für mich wie Mikro-Optimierung. Sie sollten die Ausführungsengine ihre Aufgabe ausführen lassen, es sei denn, Ihre Domäne erfordert etwas anderes. – haim770

+2

Es ist ein Versuch der Mikro-Optimierung, der die Lesbarkeit des Codes behindert. Es ist im Allgemeinen keine gute Übung. –

Antwort

7

Es gibt keine Sparsamkeit beim "Speichern von Variablen", während wiederholter Code immer und immer wieder wiederholt wird. Für mich fällt das definitiv in die Kategorie DRY (Don't Repeat Yourself).

Javascript-Interpreter sind für den schnellen Zugriff auf lokale Variablen optimiert. Wenn eine Variable referenziert wird, ist der erste betrachtete Bereich der lokale Bereich, so dass er sofort gefunden wird, und weil es keinen Zugriff von außen auf lokale Variablen gibt, kann der Code innerhalb der Funktion, die sie verwendet, schön optimiert werden Gut.

Am Ende ist es wahrscheinlich so viel eine persönliche Kodierungspräferenz als alles andere.

Meine persönliche Regel ist, dass, wenn ich einige mehrstufige Referenz wie e.target.value habe und ich es mehr als einmal in einer Funktion verwende, dann werde ich eine sinnvolle lokale Variable erstellen und zuweisen, damit ich kann Verwenden Sie dann einfach die lokale Variable an den mehreren Stellen und vermeiden Sie es, dieselbe mehrstufige Eigenschaftsreferenz immer wieder zu wiederholen (ein Lehrbuchbeispiel für DRY).

Das macht definitiv den Code auch lesbarer, sowohl weil Sie einen aussagekräftigen Variablennamen haben, als auch weil es nur eine einfache Variable ist und keine mehrstufige Eigenschaftsreferenz, die einen generischen Namen hat. Während es technisch möglicherweise eine zusätzliche Codezeile für die lokale Variablenzuweisung ist, speichert es viele wiederholte Eigenschaftsnachfragen, so dass die Theorie lautet, dass es schneller sein sollte, den Endwert in textBoxContent zu speichern und nicht den Interpreter Lookup e.target.value zu haben jedes Mal.

Auch sollten Sie nie für Leute fallen, die regelmäßig Code optimieren möchten, wie sie es zuerst schreiben. Optimierungen wie diese müssen in der Regel nur für 0,000001% Ihres gesamten Codes gelten und erst dann, wenn Sie genau festgestellt haben, wo Ihr Engpass für die Leistung liegt. Und selbst dann müssen Sie mehrere Benchmarks in Ihrer Zielumgebung entwickeln, um zu beweisen, was die Dinge tatsächlich schneller macht (verwenden Sie nicht die Meinung einer Person - nur Messungen).

Zuvor sollte der gesamte Code korrekt, klar, lesbar, wartbar, erweiterbar, DRY, geeignete Leistung und etwa 10 andere Prioritäten sein, bevor jemand an eine Mikrooptimierung denkt. Wenn Sie die obigen Prioritäten auf den Fall anwenden, nach dem Sie gefragt haben, werden Sie immer entscheiden, e.target.value einer lokalen Variablen zuzuweisen, wenn Sie innerhalb eines Kontexts mehrfach darauf verweisen.

+0

Um pedantisch zu sein, hat DRY eine etwas ausgeklügeltere Bedeutung, was typischerweise bedeutet, dass Datendarstellungen über Ebenen und Ebenen hinweg nicht dupliziert werden. Beispiel: Duplizieren Sie ein Datenschema nicht einmal am Front-End und einmal am Back-End in zwei verschiedenen Schemasprachen. DRY beinhaltet oft eine Art von Pre-Prozessor oder DSL, was im Falle des Schema-Beispiels dazu führen würde, ein einzelnes Schema irgendwie in die Versionen zu kompilieren, die von verschiedenen Elementen des Systems benötigt werden. –

+0

@torazaburo - Ich weiß nicht, ob es eine genaue Definition von DRY gibt. Ich benutze den Begriff: "ein Prinzip der Software-Entwicklung, das darauf abzielt, die Wiederholung von Informationen aller Art zu reduzieren", die direkt aus der referenzierten Wikipedia-Seite übernommen wird. Mehrere Verweise auf "e.target.value" in derselben Funktion sind also eine vermeidbare Wiederholung in meinem Buch. – jfriend00