Pattern di codice per avere la minima complessità di codice possibile (Javascript)

0

Ho cercato i modelli di codifica ideali per ottenere un punteggio ottimale in una complessità ciclomatica.

Naturalmente, il codice sarà soggetto a modifiche in base a ciò che viene sviluppato, ma indipendentemente dall'obiettivo dell'applicazione ci saranno sempre i fondamenti: condizioni, resi ecc.

Per un'istanza, ciò che è considerato meno complesso dai seguenti due esempi:

//Example A    

const isDogBarking = false;

if (isDogBarking) {
    return 'Yes, Dog is barking';
}

return 'No, Dog is not barking';

Vs

//Example B

const isDogBarking = false;

return isDogBarking ? 'Yes, Dog is barking' : 'No, Dog is not barking';

A mio parere, l'Esempio A ha due ritorni e l'esempio B ne ha solo uno. Quindi, quest'ultimo sarebbe meglio.

Mi sforzo di migliorare la qualità del mio codice ma sfortunatamente non riesco a trovare il modello di codifica più efficace in Javascript

EDIT - Le domande seguenti sono state incluse in questa domanda.

Che cosa serve per aggiungere complessità nel codice?

  1. Avere una funzione esistente (restituendo o interrompendo) il prima possibile o per restituirla una sola volta alla fine?

  2. In una condizione if, per verificare prima il valore true e aggiungere il codice negativo nel blocco else? fa differenza se controllare prima la positività piuttosto che la negatività?

  3. Per avere un nidificato se le condizioni (assomigliano a una freccia) o per creare invece una condizione if per ogni risultato possibile?

  4. L'istruzione switch fornisce una lettura migliore di una condizione infinita se. Ma rende il codice meno complesso?

Queste sono semplici domande che speravo di trovare quando si tratta di conoscere la complessità ciclomatica.

    
posta Matthew Barbara 11.08.2017 - 19:59
fonte

3 risposte

5

Non penso che la complessità ciclomatica sia influenzata dai punti di uscita. È correlato al numero di percorsi di codice, che saranno correlati al numero di punti decisionali. Un modo per vederlo è "quanti test unitari dovrei scrivere per ottenere una copertura del 100% del codice?" Nel tuo esempio, avresti bisogno di due test, in entrambi i casi.

Per quanto riguarda i modelli di progettazione che riducono la complessità-- non esiste un modello magico che realizzerà questo - ma qui ce ne sono due che sono ben noti per rendere il codice più semplice:

Rivelare il modello del modulo . Riduce il numero di dipendenze mantenendo il maggior numero possibile di variabili e funzioni in un ambito privato.

Reticolo di guardia , a.k.a. "Non usare l'anti-modello della freccia!" Riduce la profondità dei if annidati e genera un modello di esecuzione del codice più lineare.

Inoltre, se vuoi davvero fare passi da gigante per eliminare la complessità di Javascript (in particolare la compatibilità cross-browser), considera l'utilizzo di jquery su parte superiore di Javascript. Non posso esagerare su quanto sia enorme il vantaggio di usare jquery (e quanto più divertente è). Una volta effettuato il passaggio a jQuery, puoi anche scrivere plug-in jquery che organizzeranno automaticamente il tuo codice.

    
risposta data 11.08.2017 - 20:20
fonte
3

Dal punto di vista della complessità ciclomatica, i due dovrebbero (credo) uscire allo stesso modo. Hai modificato la sintassi, ma in realtà non influisce sul flusso del controllo.

Se davvero volevi cambiare la complessità ciclomatica, probabilmente potresti fare qualcosa del genere:

replies = ["No, Dog is not barking", "Yes, Dog is barking"]

return replies[Number(isDogBarking)]

Non scrivo molto JS, quindi ho un po 'di quella sintassi un po' errata, ma sono ragionevolmente certo che l'idea di base sia visibile: converti il valore booleano in un numero e usalo per indicizzarlo un array.

    
risposta data 11.08.2017 - 20:18
fonte
3

Risposta breve: entrambi gli esempi hanno la stessa complessità ciclomatica, ma molti strumenti calcoleranno il primo per avere una maggiore complessità.

Risposta più lunga: "La complessità ciclomatica di una sezione di codice sorgente è il numero di percorsi linearmente indipendenti al suo interno." Entrambi gli esempi hanno lo stesso numero di percorsi, quindi hanno la stessa complessità. Molti strumenti ne aggiungono uno alla complessità per ogni ritorno, ma questo non è proprio corretto.

Quale di questi preferisci è fondamentalmente una preferenza. Preferisco il ternario perché, una volta capita la sintassi, è molto facile ingurgitare finché è breve.

    
risposta data 11.08.2017 - 20:21
fonte