Frage

Sie haben eine Reihe von Funktionen auszuführen. Fall A: Sie hängen nicht voneinander ab. Welche von diesen ist besser?

function main() {
  a();
  b();
  c();
}

oder

function main() {
  a();
}

function a() {
  ...
  b();
}

function b() {
  ...
  c();
}

Fall B: Sie hängen auf dem erfolgreichen Abschluss der vorherigen

.
function main() {
  if (a())
    if (b())
      c();
}

oder

function main() {
  if (!a()) return false;
  if (!b()) return false;
  c();
}

oder

function main() {
  a();
}

function a() {
  ... // maybe return false
  b();
}

function b() {
  ... // maybe return false
  c();
}

Besser natürlich, Mittel mehr wartbar und leichter zu folgen.

War es hilfreich?

Lösung

Fall A: 1.
Begründung: Da keine der Funktionen voneinander abhängig sind, so dass sie, um in Haupt zeigt eine logische Abfolge der Ereignisse aufrufen. Eine gute Alternative, wo sie das nächste am Ende jeder Funktion aufrufen, sieht genauso aus wie Spaghetti-Code, und ist schwer für jemand liest das Programm zu folgen.

Fall B: Keine der oben Genannten.

function main() {
    return a() && b() && c();
}

Begründung: Es scheint Sie wirklich über den Rückgabewert sich nicht, Sie wollen einfach nur früh ausbrechen, wenn eine der Funktionen einen bestimmten Wert zurückgibt. Sie können die „anded“ Ergebnis all dieser Funktionen zurückzukehren, und wenn eine dieser false zurückgibt der Code wird früh ausbrechen. Also, wenn ein false zurück dann b würde nicht ausgeführt werden. Platzieren sie alle auf einer Linie ist leicht zu lesen und prägnant zeigt, dass sie voneinander abhängig sind.

Andere Tipps

Fall A: erste Option

Wenn Sie die zweite Option zu verwenden, machen Sie es viel schwieriger, einen erneuten zu verwenden, da Sie in b und c ziehen automatisch.

Fall b: depends - do a, b und c Boolesche Werte natürlich zurückgeben oder ein anderer Wert zu überprüfen? Ich würde immer noch keinen Anruf b und b Aufruf c haben, weil dann Sie eine unnötige Abhängigkeit einzuführen. Wenn Rückgabewerte Sinn machen, lehne ich mich auf die Option 2 - weniger Verschachtelung ist eine gute Sache

.

Zunächst einmal, die beste Antwort auf mehrere Aspekte auf dem Kontext abhängen Sie den Code in ist -. Es ist niemand rechts beantworten andere als ‚es hängt‘

Allerdings bare Münze nehmen, Fall A:

Option 1 zeigt eine Top-Level-Ansicht des Algorithmus.

Option 2 versteckt diese, die Anrufe an B & C sind ausgeblendet. Es könnte eine ganze Menge Arbeit die C genannt wurde zu entdecken. Außerdem ist es schwieriger zu Test A & B in Isolation, wenn sie dann weitere Methoden aufrufen. Haupt kann immer geprüft werden, ob A, B und C verspottet werden können.

Fall B: Es ist üblich, Argumente zu haben über in einem Verfahren vs mehrere Austrittspunkte 1 Austrittspunkt. Manchmal mehrere Austrittspunkte können Code einfacher machen, die es besser verwaltbar, ein anderes Mal ist es nicht klar, welche Auswirkungen eine Rückkehr hat, oder dass eine Rückkehr auftreten wird, wodurch es weniger wartbar.

Option 1 zeigt der Algorithmus explizit, aber mehrere verschachtelte wenn die kann von Hand schnell raus. In dieser Art von Fall würde ich auf jeden Fall hat die Option 2 oder einig clevere boolean Variante (ja, corey).

Option 3 sieht einfach stumpf zu mir.

Fall A: erste Option

Fall B: zweite Option

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