Domanda

Hai una successione di funzioni da eseguire. Caso A: Loro non dipendono l'uno dall'altro. Quale di questi è meglio?

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

o

function main() {
  a();
}

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

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

Caso B: Essi dipendono dal completamento con successo del precedente

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

o

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

o

function main() {
  a();
}

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

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

Meglio, naturalmente, significa più gestibili e più facile da seguire.

È stato utile?

Soluzione

Caso A: 1.
Ragionamento: Poiché nessuna delle funzioni dipendono l'uno dall'altro, chiamandoli in ordine in spettacoli principali una sequenza logica di eventi. Il tuo alternativo in cui lo chiamano quello successivo al termine di ogni funzione sembra proprio come spaghetti code, ed è difficile per qualcuno che legge il programma da seguire.

Caso B: Nessuno dei precedenti.

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

Ragionamento: Sembra non vi interessa veramente il valore di ritorno, si vuole solo uscire presto se una delle funzioni restituisce un certo valore. È possibile restituire il risultato "anded" di tutte queste funzioni, e se uno di questi rendimenti falso il codice scoppierà presto. Quindi, se non sarà eseguito un falso allora B ritorni. Ponendo tutti su una linea di facile lettura e spettacoli conciso che sono reciprocamente dipendenti.

Altri suggerimenti

Caso A: prima opzione

Se si utilizza la seconda opzione, ne rendono molto più difficile da ri-utilizzare un perché si tira in B e C automaticamente.

Caso b: Dipende - fare a, b, c e restituire valori booleani naturalmente, o qualche altro valore per controllare? Io ancora non avrei un b chiamata e chiamata b c, perché poi si introduce una dipendenza non necessaria. Se i valori di ritorno senso, mi chino verso l'opzione 2 - meno di nidificazione è una buona cosa

.

Prima di tutto, la migliore risposta dipenderà da molteplici aspetti del contesto del codice è in -. Non c'è nessuno destro Risposta diverso da 'dipende'

Tuttavia, prendendo per oro colato, Caso A:

Opzione 1 mostra una vista di alto livello dell'algoritmo.

Opzione 2 pelli questo, le chiamate a B & C sono nascosti. Potrebbe essere un bel po 'di lavoro per scoprire la C è stato chiamato. Inoltre, è più difficile test A & B in isolamento se poi chiamano altri metodi. Principale può sempre essere testato se A, B e C possono essere presi in giro.

Caso B: E 'comune avere argomenti sull'avere 1 punto di uscita vs molteplici punti di uscita in un metodo. A volte più punti di uscita possono rendere il codice più semplice, che lo rende più gestibile, altre volte non è ovvio che impatto ha un ritorno, o che si verifichi un ritorno, che lo rende meno gestibile.

Opzione 1 mostra l'algoritmo in modo esplicito, ma multipla nidificato se di può rapidamente sfuggire di mano. In questo tipo di caso, mi piacerebbe sicuramente avere l'opzione 2 o qualche intelligente variante booleano (sì, Corey).

L'opzione 3 sembra semplicemente ottusi per me.

Caso A: prima opzione

Caso B: seconda opzione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top