L'istruzione if senza parentesi è disapprovata, ma è ancora cattiva se il tuo IDE è equipaggiato per questo?

4

Questo tipo di affermazione condizionale è generalmente disapprovato

if(condition)
  statement;

perché se aggiungi un'altra istruzione, come questa

if(condition)
  statement;
  statement;

dà l'impressione che il secondo statement sia parte del blocco if quando non lo è.

Detto questo, il mio IDE fa una indentazione automatica, il che mi sembra rendere problematico questo problema. Inoltre, quando voglio aggiungere un'altra istruzione, essa esegue automaticamente il completamento della parentesi - il che rende il problema relativo alla necessità di aggiungere manualmente parentesi quando si desidera aggiungere un'altra istruzione.

C'è qualche ragione per cui questo sarebbe ancora cattivo stile?

    
posta Peter Olson 25.04.2012 - 04:57
fonte

6 risposte

27

Sì, perché non tutti i membri del tuo team potrebbero utilizzare quel particolare IDE. In generale, è ancora abbastanza pericoloso dal momento che la maggior parte degli IDE / editor non hanno questa funzionalità in modo che possa comunque far insinuarsi gli errori.

Inoltre, molte persone preferiscono le parentesi a fini di leggibilità, dal momento che rende più chiaro che un determinato codice è associato a un'istruzione if.

    
risposta data 25.04.2012 - 04:59
fonte
16

Va bene, sarò io a dichiarare il non detto. Se omettere le parentesi fosse un reato grave, si presenterebbe con -Wall , e nessuno dei linguaggi più recenti avrebbe permesso di farlo affatto. Non è neanche lontanamente una preferenza universale, e molte persone addirittura rimuovono le parentesi dal codice esistente perché rimuovono la confusione e chiariscono che intendete includere solo un'istruzione. È un errore da principiante perché il codice non supera nemmeno i test di base, e nella mia esperienza il seguente errore è più comune tra i principianti:

if (condition);
{
    statement;
}

Probabilmente perché autoindent non catturerà questo bug, ma prenderà quello citato come motivo per includere le parentesi superflue. Autoindent è stato una caratteristica dell'editor di ogni singolo programmatore per decenni, e se non lo usi, meriti di essere ostacolato da stupidi errori di sintassi.

    
risposta data 25.04.2012 - 05:56
fonte
5

La leggibilità e la manutenibilità sono, nella maggior parte dei casi, i due attributi più importanti di qualsiasi parte di codice. L'uso della logica condizionale senza parentesi riduce la leggibilità, motivo per cui è considerato di cattivo gusto. Avere un IDE di fantasia non trasforma cattivo stile in buono stile. Non farlo.

    
risposta data 25.04.2012 - 08:05
fonte
5

Se usare o meno la parentesi graffa è una preferenza personale (e / o di squadra). Ci sono pro contro contro su ciascuno. La ragione per cui scegliere i lati è quella di essere coerenti e produrre un codice che sia più facile da comprendere e mantenere (e per "voi" intendo "la tua squadra" se lavori in un ambiente di squadra).

La tua domanda sembra non essere se uno è migliore dell'altro, ma se devi lasciare che il tuo IDE ti dica cosa è meglio. E a quella domanda dico un sonoro NO . Scegli le convenzioni di codifica in base a ciò che tu pensi sia il migliore, o al tuo team se lavori in una squadra.

    
risposta data 25.04.2012 - 13:08
fonte
2

Una delle cose carine nell'usare i delimitatori di blocchi (ie: parentesi graffe nei linguaggi C-Styled o inizio / fine nelle lingue simili a Pascal) è che quando usate singolarmente e su una linea separata, introducono uno spazio bianco addizionale in il tuo codice. Ora, senza entrare in una battaglia per appendere le parentesi graffe contro le scelte di stile inline-brace, il punto è semplicemente che nella misura in cui al compilatore non interessa in alcun modo, aggiungere un po 'di spazio in più aiuta a migliorare la leggibilità (in particolare per quelli di noi con occhi che non sono così giovani come erano in passato !!). È lo stesso trucco che usi quando crei un curriculum. Più spazio bianco fa risaltare meglio le cose da soli.

Gli altri motivi per usare i delimitatori di blocchi è quello di rendere assolutamente chiaro dove qualcosa inizia e finisce. Certo, puoi fare quanto segue:

DoTheFirstThing();
if (condition)
DoSomething();
DoSomethingElse();

Tuttavia, durante la lettura del codice, gli occhi possono facilmente saltare il codice e si finisce col fare ipotesi su ciò che si è verificato come parte dell'istruzione if. Se invece dovessi aggiungere un paio di parentesi graffe:

DoTheFirstThing();
if (condition)
{
DoSomething();
}
DoSomethingElse();

stai rendendo più chiaro dove il blocco if inizia e finisce. Naturalmente, se sei pedante riguardo alla tua indentazione, potresti obiettare che è sufficiente un semplice indent. Certo, se sei abituato ad usare un linguaggio come Python, potresti essere abituato a prestare particolare attenzione alla tua indentazione, ma rende davvero le cose molto più chiare? Diamo un'occhiata ad un paio di altri esempi. Decidi quale se la dichiarazione si distingue come la più chiara quando fai una rapida occhiata a quanto segue:

DoTheFirstThing();
if (condition)
    DoSomething();
DoSomethingElse();
DoTheSecondThing();
if (condition)
{
    DoSomething();
}
DoSomethingElse();

Ora fai lo stesso dell'esempio precedente, con questo:

DoTheFirstThing();
if (condition)
    DoSomething();
DoSomethingElse();
DoTheFirstThing();

if (condition)
{
    DoSomething();
}

DoSomethingElse();

Tra i due esempi, spicca l'ultima istruzione if con la maggiore quantità di spazi bianchi, e il codice appare più chiaro, anche se è esattamente lo stesso.

Quindi, per rispondere davvero alla domanda dell'OP, è Cattivo mettere insieme le cose ed evitare parentesi? La mia risposta è no, e penso che chiamarla brutta o povera o qualche altra negativa la stia mettendo un po 'strong. Il compilatore non interessa molto e il codice funzionerà esattamente allo stesso modo. Tuttavia, è sicuramente più leggibile se si aggiungono le parentesi graffe e viene mostrato più chiaramente lo scopo dell'istruzione If. Ancora più importante, forse, è che dimostra che stai prestando un po 'di attenzione per garantire la qualità del tuo lavoro. È come la differenza tra dipingere rapidamente una parete con un pennello largo una volta, o usare un rullo e applicare con cura due mani di vernice. Proprio come è importante guardare il finish di un lavoro di pittura, quindi con la cura extra nel codice mostra che sei disposto a prendersi del tempo per assicurarti che gli altri non abbiano difficoltà a leggere attraverso il tuo lavoro. Questo si ripaga quando è necessario rivisitare il codice mesi o anche anni dopo, o quando qualcun altro ha bisogno di supportare il codice dopo aver finito.

Il codice attentamente scritto, pulito e leggibile ispira fiducia nel codice, mentre il codice dall'aspetto disordinato di solito ispira un atteggiamento orribile e troppo difficile da lavorare verso il codice. L'attenzione ai dettagli mostra una differenza tra l'attento professionista e il programmatore meno attento. Ispira la fiducia nel tuo lavoro ed è un piacere lavorare con.

    
risposta data 25.04.2012 - 06:01
fonte
1

La qualità del codice è indipendente dall'IDE utilizzato per generarlo (passato!). L'IDE che verrà utilizzato per cambiarlo potrebbe alleviare alcuni problemi di codice. Ma questo è nel futuro. Dovresti cercare ora la qualità.

Come puoi vedere dalle altre risposte, alcune persone non considerano questo cattivo stile. Ma suppongo che la maggior parte sarebbe d'accordo sul fatto che il mixaggio di due stili vale molto di più di < qualunque stile di codifica tu disprezzi va qui & gt ;. Quindi, se sei in una squadra o lavori con una base di codice coerente esistente, segui le regole. IMHO è la cosa professionale da fare.

    
risposta data 25.04.2012 - 09:22
fonte

Leggi altre domande sui tag