Preferisci concisione o leggibilità nel codice? [chiuso]
https://softwareengineering.stackexchange.com/questions/1090
-
16-10-2019 - |
Domanda
scorciatoie di lingua può essere spesso utilizzato per rendere il codice più conciso.
Per esempio, ternario e nulla operatori coalescenza in grado di ridurre la quantità di codice, ma probabilmente a scapito della leggibilità:
In C #:
Person newGuy = new Person();
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
} else {
newGuy.Boss = boss;
}
è funzionalmente equivalente a:
Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();
, ma ovviamente molto più dettagliato.
Dove tracciare la linea quando si tratta di concisione vs leggibilità?
Soluzione
Entrambi.
Il primo esempio è certamente più verboso, e forse più esplicito ... ma mi richiede anche di eseguire la scansione di cinque linee invece di uno. Peggio ancora, si attribuisce minore importanza il suo scopo -. Assegnare un valore ad newGuy.Boss
Il secondo esempio potrebbe mi è costato un secondo se sono familiarità con il nulla operatore di coalescenza, ma non ci può essere alcun dubbio circa la sua finalità, e se sto scansione attraverso una routine più grande cercando la fonte di un valore , sarà molto più facile per me scegliere questo fuori.
Ora, contrastare questo:
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
newGuy.IsTemp = true;
newGuy.AddTask("orientation");
} else {
newGuy.Boss = boss;
newGuy.IsTemp = false;
}
... con:
newGuy.Boss = boss ?? GetDefaultBoss();
newGuy.IsTemp = boss == null;
if ( boss == null ) newGuy.AddTask("orientation");
Il secondo esempio è di nuovo molto più breve, ma ora è oscura il suo scopo facendo compiti attivati ??dallo stesso test sembrano essere distinti. Qui, mi sento la verbosità del primo è giustificata.
Altri suggerimenti
Mentre entrambi sono buoni obiettivi, sarò sempre a fianco con La leggibilità quando sono costretti a scegliere uno.
Direi che il vostro esempio migliora sia la leggibilità e brevità. Si consideri, però:
if( a > b )
{
foo = bar
}
else
{
if( c.isThing() ){
foo = somethingElse;
}
else{
foo = someFurtherThing.GetFoo();
}
}
a differenza di
foo = a > b ? bar ?? whatever.something : c.isThing() ? somethingElse : someFurtherThing.GetFoo();
Il secondo è concisa, ma è difficile da leggere. Il primo è dettagliato, ma il flusso logico è chiaro.
In definitiva, brevità non serve molto di uno scopo, oltre alla capacità di adattarsi più sullo schermo. Leggibilità rende più facile eseguire il debug, e così deve essere generalmente preferito.
direi come regola generale non sacrificare la leggibilità a causa della concisione, ma mai giudicare la leggibilità in base a un altro programmatori mancanza di conoscenza su questo argomento.
concisione e la leggibilità non sono opposti. Ti piace questa risposta, a volte più breve è più leggibile.
Vorrei dire che preferisco la leggibilità, anche se questo a volte significa utilizzando il codice conciso. (Cioè ternario per relativamente semplici condizioni all'interno di un blocco condizionale maggiore.)
In sostanza, se si è inutilmente difficile da capire, non farlo.
La leggibilità viene prima in cui è in conflitto con la concisione, perché il codice è stato modificato più spesso di quanto si è inizialmente scritto. D'altra parte:
-
rumore sintattica e codice standard spesso oscure intenzioni e leggibilità così male. A volte il codice più conciso è anche più leggibile. Ad esempio, pensate funzioni lambda o delegati / funzioni prima classe rispetto classi-unico metodo che implementano un'interfaccia metodo singola.
-
La leggibilità dovrebbero essere valutati in base a quanto sia facile il codice è da leggere per un programmatore abbastanza esperto che conosce la lingua e le sue caratteristiche uniche / avanzato abbastanza bene, non una scimmia codice a malapena competente che conosce solo il minimo comune denominatore .
Un aspetto che non credo sia stato ancora citato: quali sono tuo obiettivi
Se tutto ciò che interessa è la sicurezza del lavoro, andare per la concisione e la compattezza su tutto il resto. Skip commentando il codice, anche.
Se si vuole essere in grado di consegnare facilmente il vostro codice di off a qualcun altro mentre si va a lavorare su un nuovo progetto fresco, andare per la leggibilità, chiarezza, e un sacco di commenti solidi.
Nota: quanto sopra non è su di te personalmente, @Damovisa; è per chi sceglie tra le due posizioni.
C'è una cosa che la versione verbose ha come un vantaggio.
E 'più linee, e la maggior parte debugger sono line-oriented ! È molto difficile impostare un punto di interruzione nel mezzo di espressione, ma di solito è banalmente semplice da installare all'interno di un blocco di istruzioni.
In altre parole, quale sarebbe Volete vedere nel vostro editor, se si desidera che il debugger a calciare in quando boss == null
?
(Detto questo mi piace il ?? - operatore)
La leggibilità dovrebbe venire prima, a lungo termine la maggior parte delle persone trascorrono gran parte del tempo modificando o estendendo codice esistente -. Leggibilità è una grande parte di manutenibilità
Detto questo, concisione è qualcosa che può contribuire alla leggibilità. Per esempio, nella sua domanda il secondo frammento è sia più leggibile e più concisa.