View Full Version : stile di scrittura codice sorgente
Propongo un piccolo questionario non a scopo flame per indagare sugli "stili" di scrittura di codice sorgente...indentazione, graffe, tab, spazi, nomi variabili ecc..
E' pura curiosità mia e di altri utenti, nata da un altro post di questa sezione.
Capisco che intrinsecamente alcuni linguaggi sono fortemente dipendenti da tutti questi parametri, ma non mi sembra giusto limitare il questionario ad un solo linguaggio di programmazione...
Quindi direi ogni utente che vuole dire la sua, specifica:
1) linguaggio
2) le convenzioni che utilizza per scrivere codice.
così su due piedi mi vengono in mente queste possibili diversità ,ma siete liberi di espandere all'infinito la lista segnalandomelo:
* utilizzo delle parentesi graffe:
if (a < b) {
a = 0;
return b;
}
oppure
if (a < b)
{
a = 0;
return b;
}
* utilizzo di spazi dopo un operatore (for, if, while):
if (a < b)
oppure
if(a < b)
* tutto separato o tutto attaccato?
a=a+b-(b*2);
oppure
a = a + b - (b * 2);
* dove posizioni i commenti?
if (a = 0) //controllo a
oppure
//controllo a
if (a = 0)
* utilizzi tab oppure spazi per indentare il codice?
* cerchi di ottimizzare lo spazio?
if (a = 0)
c = 0;
oppure
if (a = 0)
{
c = 0;
}
* utilizzi nomi per le variabili, che ne ricordano il tipo?
int iVariabile;
double dNumero;
* utilizzi suffissi m_ o simili per le variabili membro?
* e per i puntatori?
fatevi sotto, senza scannarvi :D
prima, quando programmavo principalmente in perl, scrivevo codice che ci capivo solo io (niente commenti, niente indentazione...).
tipo questo:
$_=<STDIN>;
chomp;
print $_ . ' = ';
$div=2;
while($_!=1)
{
if($_ % $div)
{
$div++
}
else
{
$_/=$div;
$divs{$div}++;
}
}
@keys= sort{$a<=>$b} (keys %divs);
$lastk=pop @keys;
foreach $k (@keys)
{
print $k;
print ('^' . $divs{$k}) if $divs{$k}>1;
print ' x ';
}
print $lastk;
print ('^' . $divs{$lastk}) if $divs{$lastk}>1;
print "\n";
$x=<STDIN>;
ora sto imparando il java e sto cercando di utilizzare uno stile leggibile (almeno per me :D)...
tipo:
final double PI = 3.14; // commenti dopo la linea
int num = 3; // senza prefisso per identificare il tipo
double num2 = num + 3 * PI; // spazi tra gli operatori
if (num > PI) { //spazio dopo if e prima della graffa
if (num2 > PI) { // graffa dopo if e non a capo
num = num2; // 4 spazi / livello per indentare
}
}
ora immagino come questo mio post vi abbia cambiato la vita :D
Energy++
18-06-2007, 21:27
io faccio così:
* utilizzo delle parentesi graffe:
if (a < b) {
a = 0;
return b;
}
ma anche così:
if (a < b)
{
a = 0;
return b;
}
* NON utilizzo gli spazi dopo un operatore (for, if, while):
if(a < b)
* tutto separato
a = a + b - (b * 2);
* i commenti li metto dove viene meglio...
* se dopo un if c'è solo un istruzione, niente parentesi
* non utilizzo nomi per variabili che ne ricordano il tipo.... (forse dovrei)
* idem per i puntatori
cdimauro
19-06-2007, 07:53
Propongo un piccolo questionario non a scopo flame per indagare sugli "stili" di scrittura di codice sorgente...indentazione, graffe, tab, spazi, nomi variabili ecc..
E' pura curiosità mia e di altri utenti, nata da un altro post di questa sezione.
Capisco che intrinsecamente alcuni linguaggi sono fortemente dipendenti da tutti questi parametri, ma non mi sembra giusto limitare il questionario ad un solo linguaggio di programmazione...
Quindi direi ogni utente che vuole dire la sua, specifica:
1) linguaggio
2) le convenzioni che utilizza per scrivere codice.
così su due piedi mi vengono in mente queste possibili diversità ,ma siete liberi di espandere all'infinito la lista segnalandomelo:
Utilizzo il tuo post per riportare lo stile che us(av)o per C (e C++):
* utilizzo delle parentesi graffe:
if (a < b) {
a = 0;
return b;
}
* utilizzo di spazi dopo un operatore (for, if, while):
if (a < b)
* tutto separato:
a = a + b - (b * 2);
* posizioni dei commenti:
if (a = 0) //controllo a
oppure
// Commento moooooolto lungo. In questi casi utilizzo quasi sempre /* ... */
if (a = 0)
Comunque metto pochissimi commenti nel codice (a parte quando ho lavorato all'STM, dove la stragrande maggioranza dei caratteri facevano parte dei commenti, appunto): tendo a scrivere codice pulito, facile da leggersi e con identificatori autoesplicativi.
* utilizzo spazi per indentare il codice: i tab li suo, ma li faccio convertire in spazi dall'editor. Un tab = 2 spazi.
* non ottimizzo lo spazio: se un blocco presenta una sola istruzione, trovo inutile aprire un blocco con le parentesi graffe.
Quindi questo:
if (a = 0)
c = 0;
lo uso sempre quando c'è una sola istruzione da eseguire.
* utilizzo nomi per le variabili che ne ricordano il tipo quando devo realizzare delle interfacce o delle classi astratte, ma in questi casi o cerco un avverbio che possa rendere il nome dell'interfaccia (es: Drawable) oppure metto come prefisso "Abstract" (es: AbstractPlayfield).
Per il resto i nomi sono quasi sempre autoesplicativi, tranne quando dal contesto l'uso è evidente (ad esempio gli indici di un ciclo: spesso e volentieri utilizzo i, j, k, ecc.).
int Contatore;
double Valuta;
* non utilizzo suffissi m_ o simili per le variabili membro.
* nemmeno per i puntatori.
fatevi sotto, senza scannarvi :D
Per questioni di stile? Saremmo ridotti veramente male. :p
Con Python il mio stile è molto simile a quello qui sopra descritto, tranne per il fatto che non ci sono parentesi graffe o istruzioni per delimitare i blocchi. Ad esempio:
class Template:
'Implements a template system for HTML rendering'
HeadTemplate = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">
<%(html)s>
<%(head)s>
<%(meta)s %(http-equiv)s = "Content-Type" %(content)s = "text/html; charset=iso-8859-1">
<%(title)s>%(Title)s</%(title)s>
</%(head)s>
<%(body)s%(Body)s>'''
def __init__(self, Title, *Arguments, **Keywords):
self.LowerCase()
self.Lines = ['']
self.DebugLines = []
self.ShowDebug = True
self.HideBodyOnDebugInfo = False
self.NewLine = True
self.AutoIndent = True
self.BeginTR = ''; self.EndTR = ''
self.DB = None
self.PendingTags = [self.ApplyCase('html'), self.ApplyCase('body')]
self.Title(Title, *Arguments, **Keywords)
def __str__(self):
'Return the informations logged as a string'
return '\n'.join(self.Lines) + '\n'
def SetDB(self, DB):
'Sets the database instance (DBUtils.AbstractDB descendant) to be used to read data from a db'
self.DB = DB
def SetCase(self, UpperCase):
'Sets the case to be used for HTML tags; True means uppercase, False lowercase'
self.ApplyCase = (lambda x : x.upper()) if UpperCase else (lambda x : x.lower())
E' un piccolo pezzo di una classe che ho scritto per realizzare un semplice sistema di template HTML.
System.out.println("ciao, il tuo nome é " + Utente.getNome() + ""); // Con spazi
System.out.println("ciao, il tuo nome é "+Utente.getNome()+""); // Senza spazi
personalmente utilizzo gli spazi :)
repne scasb
19-06-2007, 09:23
Sull'utilizzo delle parentesi graffe, spazi dopo un operatore (for, if, while), tutto attaccato o meno (uso "return(1)" e non "return 1"):
if(a<b)
{
a=0;
return(b);
}
Per i commenti, non li uso in quanto mi affido ad un file testo separato nel quale spiego cosa ho sviluppato nel sorgente e come.
Indentazione codice: 4 spazi.
Non uso parentesi graffe se un blocco e' costituito da una sola riga.
Costanti tutte maiuscole, variabili tutte minuscole, nomi di funzioni minuscole con in maiuscolo il primo carattere o il primo caratte dopo uno spazio. Qualsiasi spazio nel nome di una variabile, costante o funzione e sostituito dal carattere "_".
Utilizzo l'old-style per la dichiarazione delle funzioni.
Non ho problemi a nidificare il codice, ne ad avere righe di codice di 100 e oltre caratteri.
In riferimento ai linguaggi "tipo C":
* utilizzo delle parentesi graffe:
if (a < b) {
a = 0;
return b;
}
MA sulla riga seguente per dichiarazioni di classi e metodi (funzioni).
* utilizzo di spazi dopo un operatore (for, if, while):
if( a < b )
per evidenziare cosa c'e' dentro le parentesi.
* tutto separato o tutto attaccato?
a = a + b - (b * 2);
* dove posizioni i commenti?
Dipende dalla lunghezza.
* utilizzi tab oppure spazi per indentare il codice?
E che ne so, lascio fare a Eclipse... :D
* cerchi di ottimizzare lo spazio?
if (a = 0)
c = 0;
MA forse dovrei abituarmi all'altra forma, visto che di recente mi e' successo che
avevo un codice tipo:
if(...)
blah();
else
bleh();
poi ho aggiunto:
if(...)
if(...)
blah();
...
e l'else si e' "attaccato" all'if sbagliato... ci ho messo un po' a capire dov'era l'errore :doh:
* utilizzi nomi per le variabili, che ne ricordano il tipo?
* utilizzi suffissi m_ o simili per le variabili membro?
* e per i puntatori?
Dipende, se serve a rendere piu' leggibile il codice.
^TiGeRShArK^
19-06-2007, 10:27
1) linguaggio
Java
* utilizzo delle parentesi graffe:
if (a < b) {
a = 0;
return b;
}
* utilizzo di spazi dopo un operatore (for, if, while):
if (a < b)
* tutto separato o tutto attaccato?
a = a + b - (b * 2);
* dove posizioni i commenti?
if (a = 0) //controllo a
//controllo a
if (a = 0)
entrambi.. dipende dai casi...
* utilizzi tab oppure spazi per indentare il codice?
inutile fare questa suddivisione dato che un qualsiasi editor converte i tab in spazi e viceversa :p
* cerchi di ottimizzare lo spazio?
if (a = 0){
c = 0;
}
Questo costrutto con le parentesi è MOLTO + leggibile nel caso di istruzioni condizionali nidificate e/o concatenate.
* utilizzi nomi per le variabili, che ne ricordano il tipo?
NO.
Eclipse mi dice già di che tipo sono quando gli passo il mouse di sopra...
E cmq già dal nome è facile intuire il tipo.
Esempio:
Node node = new Node();
Collection <Node> nodes = new ArrayList <Node> ();
Quindi quando vedo un nome plurale sono sicuro che è una collection, quando vedo un nome singolare capisco cos'è immediatamente dal nome descrittivo che ho utilizzato.
* utilizzi suffissi m_ o simili per le variabili membro?
NO.
Vedi punto precedente.
* e per i puntatori?
Quali puntatori? :asd:
RaouL_BennetH
19-06-2007, 15:20
A me invece personalmente le parentesi graffe così le odio:
if(a < b) {
.....
}
preferisco sempre fare così:
if (a < b)
{
blablba
}
//e le metto anche se c'è una sola riga
Io faccio così:
{
a = 0;
return b;
}
if(a < b)
a = a + b - (b * 2);
//controllo a
if(a = 0)
* utilizzi tab oppure spazi per indentare il codice? Spazi
if(a = 0)
{
c = 0;
}
* utilizzi nomi per le variabili, che ne ricordano il tipo? no
* utilizzi suffissi m_ o simili per le variabili membro? no
* e per i puntatori? no
medicina
20-06-2007, 00:05
-
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.