SE stenografia ELSE. Fa male la leggibilità [duplicato]

1

Usi la stenografia se le altre frasi danneggiano la leggibilità?

Confronto:

string name = street != null ? street.Owner : "Not known";

Con:

string name;

if(street != null)
{
    name =  street.Owner;
}
else
{
    name = "Not known";
}

Sono diventato abbastanza familiare con la stenografia che è leggibile solo per le dichiarazioni brevi come la versione lunga. È vero per la maggior parte degli sviluppatori o dovrei preferire la versione più dettagliata

    
posta Tom Squires 02.03.2012 - 17:13
fonte

6 risposte

14

Ciò a cui ti riferisci è un operatore ternario. A mio avviso, può aumentare la leggibilità per verifiche condizionali semplicistiche come quella nella tua domanda. È breve e fornisce una coppia chiara e ovvia di valori di ritorno. Nidificarli fa male la leggibilità. Anche se non è una domanda duplice, le "ferite" sono chiaramente dimostrate nella domanda THIS .

Codice da quella domanda:

int median(int a, int b, int c) {
    return (a<b) ? (b<c) ? b : (a<c) ? c : a : (a<c) ? a : (b<c) ? c : b;
}
    
risposta data 02.03.2012 - 17:20
fonte
3

Mi ci sono voluti circa cinque minuti per abituarmi al modulo breve (un "operatore ternario").

L'operatore ternario è molto meglio per questo particolare esempio, perché è solo una trasformazione di validazione, se vuoi. Come parte di un processo di convalida, ci possono essere molti di questi, e l'uso di ordinari if / thens può diventare rapidamente ingombrante.

    
risposta data 02.03.2012 - 17:23
fonte
2

È leggibile finché non lo si abusa utilizzando una logica booleana complicata o utilizzando troppa logica.

Esempio:

string name = street != null & street.Length > 0 ? GetNumber(street) + " " + street + " " + GetOwner(street) : Properties.Resources.UnknownStreet;
    
risposta data 02.03.2012 - 17:21
fonte
1
string name = street != null ? street.Owner : "Not known";

Questo era orribile da leggere a prima vista! Ero occupato a capire name = street , ma mi sono reso conto in seguito che la tua sintassi era effettivamente perfetta.

string name;

if(street != null)
{
name =  street.Owner;
}
else
{
name = "Not known";
}

Questo non ho fatto troppo sforzo per capire (in parte perché il primo ha già risolto il mio cervello). Tuttavia, sono d'accordo che questo è troppo inefficiente.

Tuttavia, mantenendo la brevità mentre la leggibilità entrambi, avrei fatto in questo modo,

string name = (street != null) ? (street.Owner) : "Not known";

Questo va bene, ma non userò l'operatore ternario ? al posto di if mai, nel caso che una delle clausole sia più di una variabile. o qualsiasi espressione complessa con più di 2 parentesi o 2 linee.

    
risposta data 02.03.2012 - 17:28
fonte
0

Sento spesso che i programmatori di moduli provengono da altre lingue di quanto non danneggi la leggibilità. Ma una volta che si sono abituati, diventa naturale. Per i programmatori di altre lingue (ad es. Delphi) potrebbe non tradursi in qualcosa che già conoscono, quindi pensano che sia difficile.

Quando conosci la lingua, penso che in realtà migliora la leggibilità (a meno che tu non leghi più volte questa stenografia o usi condizioni davvero complesse).

    
risposta data 02.03.2012 - 17:20
fonte
0

Come la maggior parte della stenografia, può essere buono per la leggibilità se usato correttamente.

Se inizi a unire condizioni lunghe con altri operatori ternari, inizierai ad avere problemi.

Se esiti, ti suggerisco di fare una revisione del codice a riguardo. Se tutti i membri della tua squadra preferiscono la versione abbreviata, seguici.

La leggibilità è soggettiva

    
risposta data 02.03.2012 - 17:27
fonte

Leggi altre domande sui tag