2014-05-19 10 views
38

Oggi ero in una riunione Webex che mostrava il mio schermo con un codice Perl che ho scritto. Il mio capo mi ha detto improvvisamente mentre tutti gli altri guardavano e sentivano che dovevo rimuovere le virgole finali dal mio hash e dalle strutture dell'array perché è una cattiva pratica. Ho detto che non pensavo che fosse una cattiva pratica in Perl, ma lui ha insistito e mi ha fatto cancellare quelle virgole solo per mostrare il mio copione durante la riunione.Le virgole finali in Perl sono una cattiva pratica?

Continuo a pensare che non sia una cattiva pratica in Perl, ma posso sbagliarmi. In realtà li trovo piuttosto convenienti e una buona pratica perché mi impediscono di aggiungere nuovi elementi e di dimenticare di aggiungere la virgola corrispondente nel processo.

Ma, mi piacerebbe davvero sapere se è una buona o cattiva pratica ed essere in grado di mostrarlo al mio capo (se ha torto) con buoni argomenti e anche buone fonti per i miei argomenti.

Quindi, è una cattiva pratica lasciare le virgole finali?

Questo è un esempio:

my $hash_ref = { 
    key1 => 'a', 
    key2 => 'b', 
    key3 => 'c', 
}; 

my $array_ref = [ 
    1, 
    2, 
    3, 
]; 
+20

terribile dimostrazione di potenza abusi ... e, secondo me, l'ignoranza. – brasofilo

+5

È obsoleto, ma ['Perl Best Practices'] (http://shop.oreilly.com/product/9780596001735.do) ha ancora alcuni buoni suggerimenti: [' Code Layout> Commas'] (http: // my. safaribooksonline.com/book/programming/perl/0596001738/2dot-code-layout/commas) – Miller

+0

@Miller: divertente che quel codice sia stato chiaramente modificato; il testo implica che il ')' era originariamente sulla riga seguente. – ysth

risposta

53

È una buona pratica avere la virgola finale. Larry l'ha aggiunto a causa di un errore comune che ha visto fare ai programmatori. Quando hanno aggiunto elementi a una lista (o qualunque sia stata definita dalla loro lingua), hanno dimenticato il carattere separatore. Perl consente la virgola finale di proposito. Non è una stranezza o un effetto collaterale di qualcos'altro.

Ciò che è una cattiva pratica, tuttavia, sta distragendo un incontro pieno di persone con qualcosa che il tuo capo avrebbe potuto correggere in seguito. A meno che l'incontro non sia stato specificamente una revisione del codice, il tuo capo ha perso un sacco di tempo. Ho sempre desiderato che, per partecipare a una videoconferenza, dovessi inserire la tua compensazione per minuto in modo che un contatore potesse apparire sullo schermo di tutti per mostrare quanti soldi venivano sprecati. Spendere un paio di centinaia di dollari per guardarti togliere le virgole su un programma di lavoro ridurrebbe quelle sciocchezze.

+3

Grazie mille per aver risposto a questa domanda! :-) –

+1

Voglio quel contatore di compensazione! –

17

L'Apache mod_perl coding style document dice che questo

Ogni volta che si crea un elenco o una matrice, sempre aggiungere una virgola dopo l'ultimo elemento. La ragione per fare questo è che è molto probabile che i nuovi articoli verranno aggiunti alla fine della lista in futuro. Se manca la virgola e questo non viene notato, si verificherà un errore.

Ciò che il tuo manager potrebbe aver pensato è che fare la stessa cosa in C è non standard e non portatile, tuttavia non ci sono scuse per il suo comportamento straordinario.

+0

È completamente valido in C dalla C89. – Ruslan

30

Quindi la pagina PBP a cui fa riferimento Miller sostiene che è più semplice riordinare l'elenco tagliando e incollando le righe; il documento di stile mod_perl collegato da Borodin sostiene di evitare un errore di sintassi momentaneo quando si aggiungono cose.

Molto più significativo di entrambi, a mio parere, è che se si dispone sempre di una virgola finale e si aggiunge una linea, la differenza mostra solo la riga aggiunta e le linee esistenti rimangono invariate. Questo rende la ricerca della colpa migliore e rende le differenze più leggibili.

+6

Apprezzo molto anche questo fatto. Tanto che trovo deludente quando altre lingue non consentono la virgola finale. – Miller

-1

Preferisco virgole in testa, anche se so che è piuttosto impopolare e sembra irritare il dislessico. Anche io non sono stato in grado di trovare un'opzione perltidy per questo. Risolve anche il problema del cambio di riga (tranne che per la prima riga, ma di solito non è quello che viene modificato nella mia esperienza), e adoro il modo in cui le virgole si allineano in colonne ordinate. Funziona anche in linguaggi che sono agnostici nello spazio bianco ma non amano elencare virgole tra virgolette sulle liste in modo abbastanza preciso. Penso di aver imparato questo modello mentre lavoravo con javascript ...

my $hash_ref = 
    { key1 => 'a' 
    , key2 => 'b' 
    , key3 => 'c' 
    }; 

my $array_ref = 
    [ 1 
    , 2 
    , 3 
    ]; 
+14

Non sono un dislessico ma questo formato sicuramente mi irrita anche. :-) –

+4

Il codice è più leggibile quando la maggior parte di esso è scritta nello stesso modo, quindi quando si passa da un segmento di codice si può continuare ad analizzare con gli stessi schemi mentali e mantenere una buona velocità di lettura. Il tuo codice è diverso dalla maggior parte del codice (CPAN) e quindi rallenta le persone durante la lettura. Se la tua azienda ha una grande mole di codice come quella, con tutti i mezzi, mantieni la coerenza e mantienila così, ma quando interagisci con il resto del mondo, per favore sii rispettoso e adatta il tuo stile di codifica alla maggioranza. (Non è necessario accusare la gente di avere malattie reali.) – Mithaldu

+3

non so perché i downvotes, è un'alternativa perfettamente ragionevole alle virgole finali. meglio di nessuna virgola finale, IMO. certo, è una questione di gusti, e pochi lo estenderebbero anche a [punto e virgola] (https://web.archive.org/web/20091213153855/http://perl.4pro.net/pcs.html) – ysth

Problemi correlati