Perl - Coding Standard
Ogni programmatore, ovviamente, avrà le sue preferenze riguardo alla formattazione, ma ci sono alcune linee guida generali che renderanno i tuoi programmi più facili da leggere, capire e mantenere.
La cosa più importante è eseguire i programmi sempre sotto il flag -w. Puoi disattivarlo esplicitamente per particolari porzioni di codice tramite il pragma no warnings o la variabile $ ^ W se necessario. Dovresti anche eseguire sempre in use strict o conoscere il motivo per cui no. Anche l'uso di sigtrap e persino di utilizzare pragmi diagnostici può rivelarsi utile.
Per quanto riguarda l'estetica del layout del codice, l'unica cosa a cui Larry tiene fortemente è che la parentesi graffa di chiusura di un BLOCCO multilinea deve allinearsi con la parola chiave che ha iniziato il costrutto. Oltre a ciò, ha altre preferenze che non sono così forti -
- Rientro a 4 colonne.
- Se possibile, aprire ricci sulla stessa riga della parola chiave, altrimenti allineare.
- Spazio prima del ricciolo di apertura di un BLOCCO multilinea.
- BLOCCO di una riga può essere messo su una riga, inclusi i ricci.
- Nessuno spazio prima del punto e virgola.
- Punto e virgola omesso in BLOCCO "breve" di una riga.
- Spazio intorno alla maggior parte degli operatori.
- Spazio attorno a un pedice "complesso" (tra parentesi).
- Linee vuote tra blocchi che fanno cose diverse.
- Altri non coccolati.
- Nessuno spazio tra il nome della funzione e la sua parentesi di apertura.
- Spazio dopo ogni virgola.
- Linee lunghe interrotte dopo un operatore (tranne e e o).
- Spazio dopo l'ultima parentesi corrispondente sulla riga corrente.
- Allinea verticalmente gli elementi corrispondenti.
- Ometti la punteggiatura ridondante finché la chiarezza non ne risente.
Ecco alcune altre questioni di stile più sostanziali su cui riflettere: solo perché PUOI fare qualcosa in un modo particolare non significa che DOVRESTI farlo in quel modo. Perl è progettato per darti diversi modi per fare qualsiasi cosa, quindi considera di scegliere quello più leggibile. Ad esempio:
open(FOO,$foo) || die "Can't open $foo: $!";
È meglio di -
die "Can't open $foo: $!" unless open(FOO,$foo);
Perché il secondo modo nasconde il punto principale dell'istruzione in un modificatore. D'altra parte,
print "Starting analysis\n" if $verbose;
È meglio di -
$verbose && print "Starting analysis\n";
Perché il punto principale non è se l'utente ha digitato -v o meno.
Non passare attraverso stupide contorsioni per uscire da un ciclo in alto o in basso, quando Perl fornisce l'ultimo operatore in modo da poter uscire nel mezzo. Basta "ridurlo" un po 'per renderlo più visibile -
LINE:
for (;;) {
statements;
last LINE if $foo;
next LINE if /^#/;
statements;
}
Vediamo alcuni punti più importanti:
Non aver paura di usare le etichette di loop: sono lì per migliorare la leggibilità e per consentire interruzioni di loop multilivello. Vedi l'esempio precedente.
Evita di usare grep () (o map ()) o `backtick` in un contesto void, cioè quando butti via i loro valori di ritorno. Queste funzioni hanno tutte valori di ritorno, quindi usale. Altrimenti usa un ciclo foreach () o la funzione system ().
Per la portabilità, quando si utilizzano funzionalità che potrebbero non essere implementate su ogni macchina, testare il costrutto in una valutazione per vedere se fallisce. Se sai quale versione o livello di patch è stata implementata una particolare funzionalità, puoi provare $] ($ PERL_VERSION in inglese) per vedere se sarà presente. Il modulo Config vi permetterà anche di interrogare i valori determinati dal programma Configure al momento dell'installazione di Perl.
Scegli identificatori mnemonici. Se non ricordi cosa significa mnemonico, hai un problema.
Sebbene gli identificatori brevi come $ gotit siano probabilmente ok, usa i trattini bassi per separare le parole in identificatori più lunghi. In genere è più facile leggere $ var_names_like_this rispetto a $ VarNamesLikeThis, soprattutto per i non madrelingua inglese. È anche una semplice regola che funziona in modo coerente con VAR_NAMES_LIKE_THIS.
I nomi dei pacchetti a volte sono un'eccezione a questa regola. Perl informalmente riserva nomi di moduli in minuscolo per moduli "pragma" come integer e strict. Altri moduli dovrebbero iniziare con una lettera maiuscola e utilizzare maiuscole e minuscole, ma probabilmente senza trattini bassi a causa delle limitazioni nelle rappresentazioni dei nomi dei moduli dei file system primitivi come file che devono rientrare in pochi byte sparsi.
Se hai un'espressione regolare davvero pelosa, usa il modificatore / x e inserisci degli spazi bianchi per far sembrare un po 'meno il rumore di linea. Non utilizzare la barra come delimitatore quando la tua espressione regolare ha barre o backslash.
Controlla sempre i codici di ritorno delle chiamate di sistema. I buoni messaggi di errore dovrebbero andare a STDERR, includere quale programma ha causato il problema, quali erano la chiamata di sistema fallita e gli argomenti e (MOLTO IMPORTANTE) dovrebbe contenere il messaggio di errore di sistema standard per cosa è andato storto. Ecco un esempio semplice ma sufficiente:
opendir(D, $dir) or die "can't opendir $dir: $!";
Pensa alla riutilizzabilità. Perché sprecare le capacità intellettuali in un one-shot quando potresti voler fare di nuovo qualcosa del genere? Considera l'idea di generalizzare il tuo codice. Considera l'idea di scrivere un modulo o una classe di oggetti. Considera l'idea di eseguire il codice in modo pulito con use strict e use warnings (o -w) in vigore. Considera l'idea di regalare il tuo codice. Considera l'idea di cambiare la tua visione del mondo. Considera ... oh, non importa.
Sii coerente.
Sii gentile.