index | project | pods | responsabili |
NOMEperlmodstyle - Guida alla scrittura con stile di moduli Perl
INTRODUZIONEQuesto documento contiene un tentativo di fornire delle linee guida della comunità Perl per scrivere moduli. Estende le raccomandazioni che si trovano in perlstyle, che è da considerarsi propedeutico alla lettura di questo documento. Sebbene questo documento sia destinato ad ogni autore di moduli, esso è dedicato particolarmente a quegli autori che desiderino pubblicare i loro moduli su CPAN. L'attenzione è posta più su elementi di stile che sono visibili agli utenti di un modulo, che su quelle parti che sono visibili esclusivamente dagli sviluppatori del modulo. Ad ogni modo, molte delle linee guida presentate in questo documento possono essere estrapolate e applicate con successo al codice interno di un modulo. Questo documento differisce da perlnewmod in quanto contiene consigli di stile piuttosto che una guida introduttiva alla creazione di moduli CPAN. Contiene una lista di requisiti da verificare affinché i moduli siano conformi alla miglior pratica, senza necessariamente descrivere in dettaglio il metodo per ottenere ciò. Tutti i consigli contenuti in questo documento sono stati racimolati da lunghe conversazioni con esperti autori CPAN e utenti. Ogni consiglio che troverete è il risultato di precedenti errori. Queste informazioni sono qui raccolte per aiutarvi ad evitare di ripetere gli stessi errori ed il lavoro aggiuntivo che sarebbe inevitabilmente necessario per aggiustarli. La prima parte di questo documento fornisce una lista di verifica da consultare punto per punto; le parti successive forniscono una descrizione più dettagliata degli oggetti inclusi nella lista. La parte finale, ``I tranelli più comuni'', descrive alcuni dei più comuni errori commessi dagli autori CPAN.
RAPIDA LISTA DI VERIFICAPer i dettagli a proposito delle singole voci in questo elenco, si veda sotto.
Prima di iniziare
Le API
Stabilità
Documentazione
Considerazioni sulla distribuzione
PRIMA DI INIZIARE A SCRIVERE UN MODULOProvate a non buttarvi a capofitto nello sviluppo del vostro modulo senza aver speso un po' di tempo in precedenza a pensarci su. Un minimo di precauzione può evitarvi un sacco di lavoro in seguito.
È già stato fatto in precedenza?Potreste anche non aver bisogno di scrivere un modulo. Controllate che non sia già stato fatto in Perl ed evitate di reinventare la ruota a meno che non abbiate una buona ragione per farlo. Buoni punti di partenza per cercare moduli già esistenti includono http://search.cpan.org/ e la lista modules@perl.org Se un modulo già esistente fa quasi quello che volete, prendete in considerazione la possibilità di scrivere voi stessi una patch, una sottoclasse, o una estensione per il modulo esistente anziché riscriverlo.
Fate una cosa e fatela beneA rischio di dichiarare ovvietà, i moduli sono fatti per essere modulari. Uno sviluppatore Perl dovrebbe essere in grado di utilizzare moduli come componenti per costruire la propria applicazione. Ad ogni modo, è importante che i componenti siano della forma giusta, e che lo sviluppatore non debba usare un componente grande quando ne basta uno piccolo. Il vostro modulo dovrebbe avere uno scopo chiaramente definito, descrivibile da non più di una semplice frase. È possibile scomporre il vostro modulo in un gruppo di moduli correlati? Cattivo esempio: ``PippoPluto.pm provvede a implementare il protocollo PIPPO e lo standard correlato PLUTO.'' Buon esempio: ``Pippo.pm provvede a implementare il protocollo PIPPO. Pluto.pm implementa lo standard correlato PLUTO.'' Ciò significa che se uno sviluppatore necessita solamente di un modulo per lo standard PLUTO, non dovrebbe essere obbligato a installare ulteriori librerie per PIPPO.
Di cosa è composto un nome?Assicuratevi di scegliere in anticipo un nome appropriato per il vostro modulo. Questo sarà utile per trovare e ricordare il vostro modulo, e renderà più intuitivo programmarci. Quando date un nome al vostro modulo, prendete in considerazione i seguenti accorgimenti:
Dovreste contattare modules@perl.org per chiedere opinioni sul nome del vostro modulo prima di renderlo pubblico. Dovreste inoltre provare a chiedere consiglio a chi ha già familiarità con il dominio delle applicazioni del modulo e con il sistema dei nomi di CPAN. Gli autori di moduli simili o moduli con nomi simili potrebbero essere un buon punto di partenza.
PROGETTARE E SCRIVERE IL VOSTRO MODULOConsiderazioni per la progettazione e la stesura di moduli:
OO o non OO?Il vostro modulo può essere orientato agli oggetti (OO) oppure no, o può disporre di entrambi i tipi di interfacce. Ci sono pro e contro per le due tecniche, che devono essere presi in considerazione quando progettate le vostre API. È opinione di Damian Conway [autore di ``Object Oriented Perl'', NdT] che l'utilizzo di Perl OO debba essere preso in considerazione:
Valutate con attenzione se lo stile OO è appropriato per il vostro modulo. Programmazione OO gratuita genera API complesse che sono difficili da capire o utilizzare per il programmatore di medie capacità.
Progettare le vostre APILe vostre interfacce dovrebbero essere comprensibili per un programmatore di medie capacità. Le seguenti linee guida possono aiutarvi a giudicare se le vostre API sono sufficientemente chiare:
Strict e messaggi di warningIl vostro modulo dovrebbe funzionare con successo con la direttiva strict e senza generare alcun messaggio di warning. Il vostro modulo dovrebbe inoltre gestire il controllo di dati potenzialmente dannosi (taint-checking) quando ciò è appropriato, sebbene ciò possa causare difficoltà in molti casi.
RetrocompatibilitàModuli ``stabili'' non dovrebbero interrompere la retrocompatibilità senza che passi almeno una lunga fase di transizione e un cambiamento di primaria importanza nel numero di versione.
Gestione degli errori e messaggiQuando il vostro modulo si imbatte in un errore dovrebbe fare una o più cose delle seguenti:
Una gestione dell'errore configuarbile può essere molto utile per gli utenti. Si prenda in considerazione di offrire una scelta per i livelli di warning e messaggi di debug, un'opzione per spedire messaggi a un file esterno, un modo per specificare una routine di gesione di errore, o altre caratteristiche simili. Per queste opzioni, siate sicuri di garantire comportamenti di default legati agli utilizzi più frequenti.
DOCUMENTARE IL VOSTRO MODULO
PODIl vostro modulo dovrebbe includere della documentazione destinata agli sviluppatori Perl. Dovreste utilizzare la ``plain old documentation'' (POD) [semplice vecchia documentazione, NdT] per la vostra documentazione tecnica generale, sebbene potreste voler scrivere documentazione aggiuntiva (white papers [libri bianchi, NdT], guide introduttive, ecc) in qualche altro formato. Dovrete includere i seguenti argomenti:
Il livello di dettaglio nella documentazione dei moduli Perl va da meno dettagliata a più dettagliata. La vostra sezione SINOSSI dovrebbe contenere un esempio di utilizzo minimale (forse così piccolo da consistere di una sola linea di codice; tralasciate i casi di utilizzo non comuni o qualsiasi cosa che non sia necessaria per la maggior parte degli utenti); La sezione DESCRIZIONE dovrebbe descrivere il vostro modulo a grandi linee, di solito in pochi paragrafi; maggior dettaglio sui metodi e sulle routine del modulo, lunghi esempi di codice, o altro materiale approfondito dovrebbero essere localizzati in sezioni seguenti. Idealmente, coloro che hanno un po' di familiarità con il vostro modulo dovrebbero essere in grado di rinfrescarsi la memoria senza muovere la pagina in basso. Il vostro lettore, proseguendo con la lettura del documento, dovrebbe carpire una progressivamente maggior quantità di informazione. L'ordinamento consigliato per le sezioni per la documentazione di un modulo Perl è il seguente:
Mettete la vostra documentazione vicino al codice che essa va a documentare (documentazione ``inline''). Includete la documentazione POD per un dato metodo subito sopra alla subroutine del metodo. Ciò rende più semplice mantenere la documentazione aggiornata, e vi evita di dover documentare ogni porzione di codice due volte (una volta nel POD e una volta nei commenti).
README, INSTALL [INSTALLAZIONE, NdT], note di realizzazione, changelogIl vostro modulo dovrebbe inoltre includere un file README che descriva il modulo e contenga riferimenti a ulteriori informazioni (sito web, indirizzo di posta elettronica dell'autore). Dovrebbe essere incluso un file INSTALL, e dovrebbe contenere semplici istruzioni per l'installazione. Nel caso in cui utilizziate ExtUtils::MakeMaker di solito saranno: Nel caso in cui utilizziate Module::Build, di solito saranno: Dovreste produrre delle note di rilascio o dei changelog per ogni versione del vostro software, al fine di descrivere cambiamenti visibili all'utilizzatore, in termini rilevanti per l'utente.
CONSIDERAZIONI SUL RILASCIO
Numerazione di versioniLa numerazione delle versioni dovrebbe denotare almeno le distribuzioni principale e secondaria, e al limite le distribuzioni di ordine gerarchico inferiore. Una distribuzione principale è tale per cui la maggior parte delle funzionalità ha subito un cambiamento, o nella quale sono state aggiunte importanti nuove funzionalità. Un rilascio minore si ha quando sono state aggiunte, o modificate, poche funzionalità. Di solito si utilizzano dei numeri di distribuzioni gerarchicamente inferiori per quei cambiamenti che non alterano la funzionalità, come le aggiunte alla documentazione. Lo schema di numerazione più comune delle versioni per CPAN è del tipo: 1.00, 1.10, 1.11, 1.20, 1.30, 1.31, 1.32 Una corretta numerazione di una versione per CPAN è un numero in virgola mobile con almeno due cifre dopo la virgola. Potete verificare la conformità con CPAN utilizzando perl -MExtUtils::MakeMaker -le 'print MM->parse_version(shift)' 'Pippo.pm' Se volete distribuire una versione 'beta' o 'alpha' di un modulo, ma non desiderate che CPAN.pm la includa nella lista come più recente, utilizzate il trattino basso dopo il normale numero di versione seguito da almeno due cifre, per esempio 1.20_01. Se fate ciò, è consigliato il seguente idioma: $VERSION = "1.12_01"; $XS_VERSION = $VERSION; # necessario solamente se avete codice XS $VERSION = eval $VERSION; Con questo trucco MakeMaker leggerà solamente la prima linea e poi il trattino basso, mentre l'interprete Perl valuterà $VERSION e convertirà la stringa in un numero. Operazioni successive che tratteranno $VERSION come un numero, saranno quindi in grado di farlo senza generare un messaggio di warning a proposito del fatto che $VERSION non sia un numero. Mai distribuire (anche una singola parola aggiunta alla documentazione) senza incrementare il numero. Anche una singola parola di documentazione aggiunta dovrebbe risultare in un cambiamento di versione a livello gerarchico inferiore.
PrerequisitiGli autori di moduli dovrebbero valutare attentamente se affidarsi ad altri moduli ed a quali. È fondamentale scegliere moduli che siano il più possibile stabili. In ordine di preferenza:
Specificate i requisiti di versione per i moduli Perl richiesti nei prerequisiti nel vostro Makefile.PL o Build.PL. Assicuratevi di specificare i requisiti della versione de Perl
in Makefile.PL o in Build.PL e con
TestOgni modulo dovrebbe essere testato prima di essere distribuito (utilizzando
``make disttest''), ed i test dovrebbero anche essere disponibili per coloro
che installano i moduli (utilizzando ``make test'').
Per Module::Build dovrete utilizzare l'equivalente di L'importanza di questi test è proporzionale alla presunta stabilità di un modulo -- un modulo che pretende di essere stabile o che ambisce ad essere largamente utilizzato dovrebbe aderire il più possibile ad uno stretto regime di test. Moduli che possono risultare utili per i vostri test (con impatto minimo sul vostro processo di sviluppo o il vostro tempo) includono Test::Simple, Carp::Assert e Test::Inline. Per strumenti di test più sofisticati si vedano Test::More e Test::MockObject.
Packaging [Pacchettizzazione, NdT]I moduli dovrebbero essere preparati per la distribuzione [Pacchettizzati, NdT] utilizzando uno degli strumenti di pacchettizzazione standard. Al momento potete scegliere tra ExtUtils::MakeMaker e Module::Build (quest'ultimo più indipendente dalla piattaforma), per permettere di installare i moduli in maniera consistente. Se utilizzate ExtUtils::MakeMaker, potete usare ``make dist'' per creare il vostro pacchetto. Esistono strumenti per aiutarvi a fare la build del modulo in uno stile compatibile con MakeMaker. Questi includono ExtUtils::ModuleMaker e h2xs. Si veda anche perlnewmod.
Fornire una licenzaAssicuratevi che il vostro modulo abbia una licenza, e che la sua versione integrale sia inclusa nella distribuzione (a meno che sia di un tipo comune ed i termini di licenza non richiedano di includerla). Se non sapete che licenza utilizzare, la cosiddetta ``dual licensing'' [doppia licenza, NdT] sotto GPL e licenza Artistica (la stessa del Perl) è una buona idea. Si veda perlgpl e perlartistic.
I TRANELLI PIÙ COMUNI
Reinventare la ruotaCi sono alcune aree di applicazione che sono già molto, molto ben supportate da CPAN. Un esempio sono i sistemi di template, un altro sono i moduli per date e ore, e ce ne sono molti altri. Benché sia un rito di passaggio scrivere la vostra versione di queste cose, valutate attentamente se il mondo del Perl abbia veramente bisogno del vostro contributo.
Provare a strafareIl vostro modulo farà parte del toolkit di uno sviluppatore. Non sarà, di per se, l'intero toolkit. Aggiungere nuove funzionalità puà essere una tentazione fino a quando il vostro codice non diventa un sistema monolitico invece che un insieme modulare di blocchi base.
Documentazione inappropriataNon cadete nella trappola di scrivere per il lettore sbagliato. Il vostro principale destinatario è uno sviluppatore con una ragionevole esperienza e con almeno una moderata conoscenza a proposito del dominio di applicazione del vostro modulo, che ha solo scaricato il modulo e vuole iniziare ad usarlo al più presto possibile. Guide rapide, documentazione orientata all'utilizzo, pubblicazioni scientifiche,
FAQ [domante poste di frequente, NdT] non sono appropriate nella documentazione
principale di un modulo. Se proprio volete includerle, fatelo in un sotto-documento
del tipo
SI VEDA ANCHE
AUTOREKirrily ``Skud'' Robert <skud@cpan.org>
TRADUZIONE
VersioneLa versione su cui si basa questa traduzione è ottenibile con: perl -MPOD2::IT -e print_pod perlmodstyle Per maggiori informazioni sul progetto di traduzione in italiano si veda http://pod2it.sourceforge.net/ .
TraduttoreTraduzione a cura di Raffaello Galli <galliraf at googlemail punto com>.
Note del traduttoreSe per caso si verificasse l'evenienza che qualche sviluppatore di lingua italiana voglia pubblicare il proprio modulo Perl su CPAN, ma per sua sfortuna non abbia sufficiente familiarità con la lingua inglese per scrivere una documentazione decente, il team di pod2it si offre per consulenza e revisione.
RevisoreRevisione a cura di dree. Mon Jun 11 22:02:17 2012 |