User Tools

Site Tools


tesi:codice

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tesi:codice [2019/08/27 16:44] – created morenotesi:codice [2024/02/28 12:23] (current) moreno
Line 2: Line 2:
  
 È molto probabile che gli argomenti di tesi che propongo richiedano di scrivere del codice. Per questo motivo elenco alcuni suggerimenti per la scrittura di codice, che sebbene siano orientati principalmente al codice in linguaggio C, si possono applicare anche ad altri linguaggi. È molto probabile che gli argomenti di tesi che propongo richiedano di scrivere del codice. Per questo motivo elenco alcuni suggerimenti per la scrittura di codice, che sebbene siano orientati principalmente al codice in linguaggio C, si possono applicare anche ad altri linguaggi.
 +
 +:!: Una trattazione approfondita delle buone pratiche di programmazione è disponibile nella dispensa seguente:
 +
 +  * M. Marzolla, [[https://www.moreno.marzolla.name/teaching/programming-style.pdf|Programmazione: una breve guida di stile]] 
 +
 +**Si invita a leggere il documento con la massima attenzione**; quanto presente in questa pagina web è solo un sunto.
  
 === Rispettare lo standard del linguaggio === === Rispettare lo standard del linguaggio ===
Line 7: Line 13:
 I programmi devono compilare correttamente senza warning (e ovviamente senza errori). Nel caso di programmi in C/C++ compilati con ''gcc'', ciò significa che i programmi devono compilare senza warning passando i flag ''-Wall -Wpedantic''. È sempre opportuno inoltre specificare lo standard che si vuole rispettare; ad esempio, se il proprio programma è scritto in C99, suggerisco di compilare con: I programmi devono compilare correttamente senza warning (e ovviamente senza errori). Nel caso di programmi in C/C++ compilati con ''gcc'', ciò significa che i programmi devono compilare senza warning passando i flag ''-Wall -Wpedantic''. È sempre opportuno inoltre specificare lo standard che si vuole rispettare; ad esempio, se il proprio programma è scritto in C99, suggerisco di compilare con:
  
-''gcc -std=c99 -Wall -Wpedantic prova.c''+''gcc -std=c99 -Wall -Wpedantic ...''
  
 Se invece si programma in ANSI C, suggerisco di usare: Se invece si programma in ANSI C, suggerisco di usare:
  
-''gcc -std=ansi -Wall -Wpedantic prova.c''+''gcc -std=c90 -Wall -Wpedantic ...''
  
 (esistono parametri analoghi per le varie versioni del C++). (esistono parametri analoghi per le varie versioni del C++).
Line 19: Line 25:
 L'uso di nomi inappropriati rende il codice difficile da comprendere e da valutare). Per rendersi conto di ciò, chi direbbe che questa funzione: L'uso di nomi inappropriati rende il codice difficile da comprendere e da valutare). Per rendersi conto di ciò, chi direbbe che questa funzione:
  
-<code>+<code C>
 int cancella( double trovato, double tentativo[], int n, int terzo, int quarto ) int cancella( double trovato, double tentativo[], int n, int terzo, int quarto )
 { {
Line 57: Line 63:
 == Esempio di commenti inutili DA EVITARE == == Esempio di commenti inutili DA EVITARE ==
  
-<code Java+<code C
-v = v + 1;    /incrementa v +v = v + 1;    /incrementa v */ 
-if ( v>10 ) { /se v e' maggiore di 10 +if ( v>10 ) { /se v e' maggiore di 10 */ 
-   v = 0;     /setta v a zero+   v = 0;     /setta v a zero */
 } }
-G.Kruskal(v); /esegui l'algoritmo di Kruskal+Kruskal(G,v); /esegui l'algoritmo di Kruskal */
 </code> </code>
  
 == Esempio di commenti appropriati == == Esempio di commenti appropriati ==
  
-<code Java+<code C
-/Individua la posizione i del primo valore +/Individua la posizione i del primo valore 
-// negativo nell'array a[]; al termine si ha + negativo nell'array a[] di lunghezza n 
-// i == a.length se non esiste alcun + al termine si ha i == se non esiste alcun 
-// valore negativo.+ valore negativo. 
 + */
 int i = 0; int i = 0;
-while ( i < a.length && a[i] >= 0 ) {+while ( i < && a[i] >= 0 ) {
     i++;     i++;
 } }
Line 88: Line 95:
 Il codice dovrebbe essere leggibile su una finestra larga 80 caratteri. I monitor moderni sono molto più larghi, ed è facile lasciarsi prendere la mano utilizzando tutta la larghezza dello schermo. Così facendo, però, le righe di codice e i commenti risultano troncati, o vengono mandati a capo, se il codice viene leggo usando una finestra più stretta.  Il codice dovrebbe essere leggibile su una finestra larga 80 caratteri. I monitor moderni sono molto più larghi, ed è facile lasciarsi prendere la mano utilizzando tutta la larghezza dello schermo. Così facendo, però, le righe di codice e i commenti risultano troncati, o vengono mandati a capo, se il codice viene leggo usando una finestra più stretta. 
  
-L'ampiezza di 80 caratteri è [[https://en.wikipedia.org/wiki/Characters_per_line|un retaggio del passato]] che però risulta comodo. Personalmente, trovo difficile leggere codice sorgente scritto usando linee troppo lunghe, e per questo mi attengo sempre alla regola tacita degli 80 caratteri.+L'ampiezza di 80 caratteri è [[https://en.wikipedia.org/wiki/Characters_per_line|un retaggio del passato]] che però risulta comodo per [[https://stackoverflow.com/questions/110928/is-there-a-valid-reason-for-enforcing-a-maximum-width-of-80-characters-in-a-code/111009#111009|diversi motivi]]: 
 + 
 +  * Il codice non va a capo se viene incollato in un messaggio (solo testo) di posta elettronica; 
 +  * Il codice risulta più leggibile rispetto al caso in cui si usino linee lunghe, dato che non è necessario spostare lo sguardo continuamente a destra sinistra; 
 +  * È possibile mantenere più finestre affiancate sui monitor moderni, se lo si desidera. 
 + 
 +Si tenga presente che, sebbene i monitor moderni abbiano guadagnato risoluzione e dimensione, i nostri occhi sono rimasti sempre gli stessi. 
 + 
 +=== Se possibile, rendere disponibile il codice con una licenza libera === 
 + 
 +Sebbene non indispensabile, suggerisco di rendere disponibile il proprio codice secondo una licenza libera. Alcuni esempi di licenze libere: 
 + 
 +  * [[https://www.gnu.org/licenses/gpl.html|GNU GPL]], [[https://www.gnu.org/licenses/lgpl.html|LGPL]], [[https://www.gnu.org/licenses/agpl.html|AGPL]] (preferibilmente versione 3 o successive); 
 +  * [[https://directory.fsf.org/wiki/License:BSD-3-Clause|BSD License]] (ne esistono diverse versioni); 
 +  * [[https://creativecommons.org/|Creative Commons]] (usata prevalentemente per prodotti diversi dal codice sorgente; evitare se possibile la clausola "non-commercial"). 
 +  * [[https://opensource.org/licenses/MIT|MIT License]] 
 + 
 +In [[https://opensource.org/licenses|questa pagina]] si trovano elencate ulteriori licenze comunemente usate. Personalmente tendo a preferire la licenza GPLv3+ (GPL versione 3 o successive), ma non impongo nessun vincolo a riguardo; si può anche decidere di non rendere il codice pubblicamente accessibile. 
 + 
 +Se si intende usare una licenza libera, occorre inserire il sunto della licenza in un commento all'inizio di ogni file sorgente (ciascuna licenza ha il proprio "boilerplate"), e includere il testo completo della licenza in un file di testo (normalmente chiamato "LICENSE") nella directory radice dell'archivio contenente i sorgenti.
  
tesi/codice.1566917095.txt.gz · Last modified: 2019/08/27 16:44 by moreno

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki