Frage

Ich bin ein bisschen von vielen Reaktionen auf Fragen betäubt, die darauf hinweisen, dass Entwickler mehr über die resultierenden kompilierten Bytes kümmern als um die Bedeutung ihres Codes. Ich neige dazu, zu pingelig über postfix / Präfix Schritt, wie ich zu pingelig sind in der Regel über einen boolean für einen Aufzählungstyp mit zwei Werten, und über die richtige Funktion Namensgebung und ...

So ist die Frage mehr eine rhetorische Umfrage ist: wenn eine darf sich die Semantik außer Acht lassen, was man schreibt? Wo ist die Grenze?

  • Operator ++ (postfix / prefix)
  • String.Empty () vs. String == ""
  • vector.empty () vs. vector.size () == 0
  • aufzuzählen {on, off} vs. boolean auf = true; off = false
  • ...

Name it.

EDIT -

Ich wollte nicht über die Notwendigkeit von (Mikro-) -optimierungen zu hinterfragen. Vielmehr möchte ich Meinungen darüber, wie gut sollten Sie bewusst sein, von dem, was Sie schreiben, und auf Aussagen wie „sondern es zu einem dword kompiliert, sowieso, also warum sollte ich es ein Enum machen?“ (Das ist ein Extremfall, ...).

War es hilfreich?

Lösung

Ich habe ein viel geschrieben Code in meiner Karriere. Sicherlich nicht so viel wie viele Leute hier, aber eine Menge Code dennoch. Während dieser Zeit habe ich eine Sache gelernt, dass wahre immer und immer wieder bewiesen hat. Wenn Sie schlampig, wenn Sie die Details ignorieren, Mängel einschleichen

Defekte kosten Zeit und Geld zu reparieren. Sie können entweder die Zeit damit verbringen, den Code sauber und klar vorne zu schreiben, wenn es billig ist, dies zu tun, oder Sie können einen Defekt im Code der Jagd nach viel Zeit und Geld später ausgeben, die Sie wahrscheinlich nicht erinnern, dass alles gut, weil Sie schlug es eilig zusammen, oder weil es nicht mit dem Codierungsstandard nicht entspricht. Das Endergebnis ist, Sie verschwenden Zeit und Geld. Ferner Sie verschwenden Zeit und Geld, das Sie haben nicht zu beginnen zu verschwenden, weil sie durch ein wenig im Voraus hätte verhindert werden können Investitionen.

Ich habe es nie bereut, akribisch über die Art und Weise zu sein ich Code schreiben. Es hat mich nie verfolgen zurückkommen. schlampig zu sein, hat mich immer wieder zurück zu verfolgen.

Andere Tipps

Define "ok". Ist es in Ordnung, wenn es auf dem ursprünglichen Liefertermin funktioniert, aber jedes Mal, wenn Sie brauchen, um eine Änderung vornehmen es eine zusätzliche 3 Wochen dauert den alten Code, um herauszufinden?

Es ist Ihre Antwort: Solange Sie den Code verstehen können, und es tut nicht weh, Ihrer Fähigkeit, es nicht zu halten

.

Wenn Sie sich Gedanken über esoterische Sachen beginnen, die keine Auswirkungen auf die Grundlinie haben, denke ich, dass zu weit geht. Diskussionen wie, ob den ternären Operator zu verwenden, oder schreiben explizit if-Anweisungen für diese Tage gut sind, wenn man nichts zu tun, sondern lehnen Sie sich zurück, legt die Füße hoch, Schluck Bier / Wein / Soda und diskutieren Fragen von „großer Bedeutung“:)

Aber die Schaffung einer Aufzählung für boolean ist einfach falsch.

Abhängig von Ihrer Kostenfunktion

Hier ein paar Dimensionen Leute lieben es, über, zu argumentieren und oft ineinander fließen. Wirklich, die Antwort ist es hängt davon ab. Was ist es, dass Sie wirklich Wert?

  • Zeichenzahl
  • Die Anzahl der ops erstellt
  • Run-time
  • Portabilität
  • Wartbarkeit
  • Clarity
  • Cleverness
  • Stabilität (frei von Fehlern?)
  • Erweiterbarkeit

ich für die höhere Ordnung Sachen immer zielt zuerst, wie Klarheit. Der Verlust der Klarheit wird in der menschlichen Zyklen bezahlt, von denen es immer ein Mangel an. selten kümmern sich um Rohtakt Zeit Menschen, und Menschen, die sagen, sie sind fast immer vorzeitig zu optimieren.

Wenn es Ihnen jeder hilft, Ich mag wir denken Fortschritte machen durch den Stapel steigen, Pflege mehr über Semantik und Arbeit bekommen, anstatt Sklaven Bits und Zahlen zu sein. Dies ist jedoch keine Entschuldigung, die Grundlagen zu vergessen und denken Sie daran, wie bestimmte semantische Bits umgesetzt werden. Sie wollen nicht mit Hosen runter in diesen seltenen Gelegenheiten, erwischt werden, wo die Geschwindigkeit der Materie beginnt und Konvention geht aus dem Fenster.

„wenn eine darf sich die Semantik außer Acht lassen, was man schreibt? Wo ist die Grenze?“

Ich denke, eine vernünftige Frage ist: „wenn sollte eine Mißachtung die Semantik von dem, was man schreibt“

Da ich Programmierung als menschliche Tätigkeit zu sehen, würde ich das einzige Mal, sagen ein sollte die Semantik einer Erklärung außer Acht lassen, wenn das System selbst zwingt Sie - wenn einige unverständliche Aussage ist die nur Art und Weise etwas zu tun. Solche Aussagen sind gut zu dokumentieren.

Die Grenze ist, wenn Sie mit write-once zu tun haben, schreib nie Code. Erst dann macht es aus, letztlich nicht das, was Sie (in diesem Fall) tun, weil Sie werden es nie wieder verwenden. Leider ist dies bezieht sich nicht auf das indirekte Feedback Dinge zu üben, die Sie lieber nicht wiederholen.

Die Grenzlinie ist Nebenwirkungen.

Wenn eine gekapselte Funktion alles tut man mit 0 unerwarteten Nebenwirkungen werden soll, und der Code lesbar ist, das ist alles, was zählt. Wenn Sie an einen externen Benutzer vorhersehbar sind und jede „bizarre“ Funktionalität wird intern gehalten, das ist alles, was zählt.

Es ändert sich etwas, wenn Sie in der Optimierung hinzufügen, aber da man nie vorzeitig optimieren sollte, das ist, wo es endet.

Micro-Optimierungen sind sinnlos 99% der Zeit. Zum Beispiel, wenn Ihre Compiler Praktikanten all „“ auf eine einzelne Instanz sowieso, erhöhen Sie die Leistung nicht in irgendeiner Weise durch String.Empty verwenden. Keine messbare Wirkung ist in der Regel das Beste, was Sie für hoffen kann, habe ich gesehen „Optimierungen“ Abnahme Leistung, aufgrund der Compiler einen besseren Job zu tun, und die Optimierung stört es.

Die meisten Code muss nicht optimiert werden. Identifizieren, wo das kann passieren muss nur mit Diagnose nach dem Code erfolgte ausgeführt wird, und selbst dann die meiste Zeit ist es durch algorithmische Optimierung durchgeführt, nicht Mikro-Optimierung.

Ich denke, in diesen Tagen die meisten Menschen sind sich einig, dass es unter der Annahme, funktioniert einwandfrei, die Lesbarkeit der wichtigste Aspekt ist. Es gibt natürlich Ausnahmen - einige Anwendungen so schnell wie möglich laufen haben, und einige Anwendungen können nie zum Absturz erlaubt sein, aber im Allgemeinen ist es Lesbarkeit

.

Die Beobachtung der Beispiele, die Sie zur Verfügung gestellt haben - In dem folgenden:

operator++ (postfix / prefix)

string.empty() vs. string == ""

Sie scheinen nicht gute Beispiele zu sein, da sie Operationen vergleichen, die in functionality unterschiedlich sind. Daher man besser nicht außer Acht lassen ihre semantischen Unterschiede.

Im Gegensatz dazu werden die folgenden Beispiele:

vector.empty() vs. vector.size() == 0

enumerate {on, off} vs. boolean on=true; off=false

Sind durchaus sinnvoll.

vector.empty() ist bevorzugt, wenn die Rahmenbedingungen der Nutzung nur dann, wenn der Vektor leer ist, um zu bestimmen sind. Auf die Gefahr klingen condescending (was ich tun nicht die Absicht zu sein): Das läuft darauf hinaus, den gesunden Menschenverstand nach unten. Warum fragen Sie nach der Größe des Vektors, wenn Sie wissen wollen, ob es leer ist? Das ist wie jemand zu fragen, wie viel Geld sie in ihrer Brieftasche haben, wenn Sie einfach nur wissen möchten, wenn sie von einer Cola genug Geld zu haben.

Wie bei enumerate {on, off} vs. boolean on=true; off=false, fragen Sie sich diese: Wie wahrscheinlich ist es, dass Sie einen anderen Wert der Aufzählung hinzufügen kann, in die Zukunft? Es scheint vernünftig, dass man könnte enumerate will {on, off, indeterminate} `(oder eine Variation), so dass die Antwort ja sein kann. Andernfalls wäre eine einfache boolean genügen.

Das führt ich zum Kern Ihrer Frage: was es zu sein scheint, wenn einige deterministisch / algorithmischer Ansatz ist eine oder andere Weise auf Fragen wie diese zu entscheiden, oder ihre Relevanz? Meine Antwort ist, dass bis zu dem Tag, dass Turingmaschinen Lage sind, die Turing Test , würde ich sagen, Nein, das ist der Grund, warum Menschen erforderlich sind, Software zu konstruieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top