Ist ein, wenn sie mit einem ein gutes Muster weiterhin übermäßige Verschachtelung zu verhindern, während über Eigenschaften in Javascript Iterieren?

StackOverflow https://stackoverflow.com/questions/3765723

Frage

ich normalerweise verwende dieses Muster zu iterieren Objekteigenschaften:

for(var property in object) {
   if(object.hasOwnProperty(property)) {
      ...
   }
}

Ich weiß nicht, wie diese übermäßige Vertiefung und vor kurzem wurde es mir darauf hingewiesen, dass ich es bekommen konnte los, indem dies zu tun:

for(var property in object) {
   if(!object.hasOwnProperty(property)) {
      continue;
   }

   ...
}

Ich mag das, weil es nicht die zusätzliche Ebene der Vertiefung einführt. Ist das Muster in Ordnung, oder gibt es bessere Möglichkeiten?

War es hilfreich?

Lösung

Ich persönlich bevorzugen:

for(var property in object) if(object.hasOwnProperty(property)) {
     ...
}

Es gibt keine zusätzliche Ebene der Einbuchtung weil for, if usw. die nächste Anweisung übernehmen, wenn Sie die geschweiften Klammern auslassen. Da wir alle unsere Code innerhalb des if hasOwnProperty Block setzen macht es keine Klammern für die for Anweisung nicht erforderlich.

Im Wesentlichen ist es gleichbedeutend mit:

for(var property in object) {
   if(object.hasOwnProperty(property)) {
     ...
   } else {
      continue;
   }
}

Andere Tipps

syntaktisch ich so etwas wie dies lieber

function own(obj) {
  var ownprops = {};
  for (var prop in obj) 
    if (obj.hasOwnProperty(prop)) ownprops[prop] = 1;

  return ownprops;
}

for (var property in own(object)) {
 //code
}

Sieht gut aus, aber es bringt zwei Schleifen über das gleiche Objekt, nicht recht Leistung klug.

Der andere Weg, es zu tun ist functionaly

function foreach(obj, func, thisp) {
  for (var prop in obj)
    if (obj.hasOwnProperty(prop)) func.call(thisp, obj[prop], prop);
}

foreach(object, function(val, key) {
  //code
});

Nur eine Schleife, sondern eine Funktion wird für jede Iteration genannt, die nicht große Leistung klug ist, aber besser als die letzte Lösung. Beachten Sie, dass es clobbers auch den Wert von this, aber Sie können diesen Wert explizit als optionales drittes Argument übergeben.

Nur ein paar Alternativen. Die Art und Weise Sie es tun, und die Art und Weise von Daniel erklärt ist ganz gut, und ohne die Leistung Kompromisse.

Außerdem würde Ich mag darauf hinweisen, dass Sie dies nicht tun Haben Code für jede einzelne geschweifte Klammer einrücken ...

Ein Faktor hängt davon ab, ob Sie nach Douglas Crockford hören. In seinem Buch JavaScript. The Good Parts, er Klumpen continue in der schlecht Teilen

„Ich habe noch nie ein Stück Code gesehen, der nicht durch sie verbessert wurde Refactoring die Aussage weiter zu entfernen.“ - Douglas Crockford, JavaScript: The Good Parts

Wie Tim unten in seinem Kommentar erwähnt, gibt Crockford keinen Grund, in dem Buch zu erklären, warum continue vermieden werden sollte. Aber auf seiner Website er sagt: „Es neigt dazu, den Steuerfluss zu verschleiern die Funktion." Ich erwähne nur Crockford Meinung, da viele ihn betrachten eine Autorität.

Persönlich sehe ich kein Problem mit, wie Sie Ihre Schleife codiert haben, zumal die continue ganz oben angezeigt, in dem es nicht leicht übersehen werden. Arbeiten Sie mit einem Team von Entwicklern? Haben sie ein gutes Verständnis von dem, was continue tut? Haben Sie eine Code-Konventionen Dokument, das spricht darüber, wie tief Verschachtelung von Aussagen zu behandeln?

Mcconnel:

Eine Schleife mit vielen Pausen kann darauf hindeuten, unklares Denken über die Struktur der Schleife oder seine Rolle in der umgebenden Code. übermäßige Pausen hebt zeigt oft, dass die Schleife werden mehr konnte eindeutig als ausgedrückt Reihe von Schleifen. Die Nutzung Pause eliminiert die Möglichkeit der Behandlung eine Schleife als Blackbox. Kontrolle ein Schleife der Austrittsbedingung mit einer Anweisung Ihre Loops zu vereinfachen. ‚Bruch‘ Kräfte der Person der Lektüre Ihrer Code zu Blick ins Innere zu verstehen, die Schleife der Steuerung, so dass die Schleife mehr schwer zu verstehen.

Dijkstra:

Funktionen wie Pause neigen dazu, Sabotage die Vorteile von strukturierten Programmierung und verhindern, dass die Programmierer aus dem Verständnis der Programm als eine Zusammensetzung von unabhängige Einheiten

Loops mit weiterhin in dieser Form berücksichtigt werden und somit kann die Schleife als Blackbox behandelt werden. Crawford ist falsch. Breaks riechen, aber weiterhin gut ist.

weitere Analyse: http://sites.google.com/site / dustingetz / dev / Pause-and-continue

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