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à?

È stato utile?

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:

  1. 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.

  2. 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.

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