Preferisco la versione senza parentesi graffe ove possibile.
La seguente spiegazione è lunga. Per favore abbi pazienza. Darò un motivo convincente per preferire questo stile. Spiegherò anche perché penso che la solita controproposta non valga.
Le linee (quasi) vuote sono uno spreco
La ragione di ciò è che la parentesi graffa di chiusura richiede una riga di codice aggiuntiva - e anche la parentesi graffa di apertura, a seconda dello stile. 1
È un grosso problema? Superficialmente, no. Dopotutto, molte persone inseriscono anche righe vuote nel loro codice per separare blocchi leggermente logicamente indipendenti, il che migliora notevolmente la leggibilità.
Tuttavia, detesto sprecare spazio verticale. I monitor moderni hanno in realtà un ampio spazio orizzontale. Ma lo spazio verticale è ancora molto, molto limitato (a meno che non si usi un monitor in posizione verticale, il che non è così raro). Questo spazio verticale limitato è un problema: è ampiamente riconosciuto che i singoli metodi dovrebbero essere il più corti possibile e che le parentesi graffe corrispondenti (o altri delimitatori di blocchi) non dovrebbero essere più di un'altezza dello schermo in differenza in modo da poter vedere l'intero blocco senza scrolling.
Questo è un problema fondamentale : una volta che non riesci più a vedere l'intero blocco sullo schermo, diventa complicato da capire.
Di conseguenza, detesto le righe vuote ridondanti. Dove singole righe vuote sono cruciali per delimitare blocchi indipendenti (basta guardare l'aspetto visivo di questo testo), consecutivi righe vuote sono una molto cattivo stile nel mio libro (e nella mia esperienza sono di solito un segno di programmatori alle prime armi).
Allo stesso modo, dovrebbero essere le linee che semplicemente trattengono un tutore e che potrebbero essere economizzate. Un blocco a istruzione singola che è delimitato da parentesi graffe fa perdere una o due righe. Con solo 50 linee per altezza dello schermo, questo è evidente.
Omettere parentesi graffe forse non fa male
C'è solo un argomento contro l'omissione di parentesi graffe: che qualcuno aggiungerà successivamente un'altra istruzione al blocco in questione e dimenticherà di aggiungere le parentesi graffe, cambiando così inavvertitamente la semantica del codice.
Questo sarebbe davvero un grosso problema.
Ma nella mia esperienza, non lo è. Sono un programmatore sciatto; eppure, nel mio decennio di esperienza di programmazione, posso onestamente dire che non ho mai dimenticato di aggiungere le parentesi quando ho aggiunto un'istruzione in più a un blocco singleton.
Trovo persino plausibile che si tratti di un errore comune: i blocchi sono una parte fondamentale della programmazione. La risoluzione a livello di blocco e l'ambito sono un processo mentale automatico e radicato per i programmatori. Il cervello lo fa (altrimenti, ragionare sulla programmazione sarebbe molto più difficile). Non è necessario un ulteriore sforzo mentale per ricordare di mettere le parentesi graffe: il programmatore ricorda anche di indentare correttamente la nuova dichiarazione aggiunta, dopo tutto; così il programmatore ha già elaborato mentalmente che è coinvolto un blocco.
Ora, io non dicendo che omettendo le parentesi non causa errori. Quello che sto dicendo è che non abbiamo prove in un modo o nell'altro. Semplicemente non sappiamo se provoca danni.
Quindi, finché qualcuno non può mostrarmi dati concreti, raccolti da esperimenti scientifici, che dimostrano che questo è davvero un problema nella pratica, questa teoria rimane una " storia così giusta ": un'ipotesi molto convincente che non è mai stata messa alla prova, e che non deve essere usato come argomento.
1 Questo problema a volte viene risolto mettendo tutto - comprese le parentesi graffe - sulla stessa linea:
if (condition)
{ do_something(); }
Tuttavia, credo sia sicuro affermare che la maggior parte delle persone lo disprezza. Inoltre, avrebbe gli stessi problemi della variante senza parentesi graffe, quindi è il peggiore di entrambi i mondi.