doc/GaladrielCodingStyle.txt
author viric@llimona
Thu, 18 May 2006 23:05:01 +0200
changeset 0 04114bce8fd0
permissions -rw-r--r--
Initial from sourceforge's cvs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     1
                        Galadriel coding style
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     2
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     3
                        Lluís Batlle i Rossell
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     4
                     viric@vicerveza.homeunix.net
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     5
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     6
		     Iniciat el 11/08/2003
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     7
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     8
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
     9
Aquest és un petit document que descriu l'estil d'escriptura de codi pel
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    10
projecte Galadriel. L'estil d'escriptura és molt personal, i no s'han de forçar
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    11
aquestes idees sobre ningú, però ja que és una cosa que hem de mantenir entre
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    12
tots, seria bo que l'estil no ens dificultés aquesta feina. Així que, si més no,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    13
tingueu en compte els punts que aquí es mencionen.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    14
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    15
Aquest document no està ni revisat ni acabat. En alguns llocs hi ha comentaris
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    16
de la forma (MAJUSCULES ?!), que significa que no sé què posar-hi, i algú de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    17
vosaltres segur que ho sabrà millor i abans que jo.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    18
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    19
Aquest document també està molt influenciat per la guia de Linus Torvalds:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    20
"Linux kernel coding style". El google us donarà la referència a aquest escrit.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    21
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    22
Espero comentaris ben aviat...
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    23
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    24
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    25
                           1. Indentació (sagnat)
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    26
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    27
Els tabuladors estan pensats per ser d'una longitud de 8 caràcters. Si volem
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    28
respectar a la resta de món, aquest és l'esquema que hauriem de seguir. Però
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    29
segur que s'aixecarà protestant molta gent si pretenem tabulacions d'aquesta
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    30
mida. Això és perquè molta gent troba excessius 8 caràcters per a indentar; bé,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    31
indentar serveix per diferenciar quan comença i acaba un bloc de control, així
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    32
que si fem indentacions grans diferenciarem molt més aquests blocs, sobretot
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    33
quan alguns de nosaltres portem més de 15 hores davant de codi.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    34
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    35
Molts direu, tot i això, que 8 caràcters és una indentació massa gran, i que
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    36
mouen el codi massa cap a la dreta... bé, tal com diu el senyor Torvalds, "if
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    37
you need more than 3 levels of indentation, you're screwed anyway, and should
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    38
fix your program". Això vol dir que utilitzar 8 caràcters també ens dóna una
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    39
idea de quant bo és el nostre codi.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    40
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    41
Fer servir tabuladors de menys de 8 caràcters també porta problemes entre
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    42
editors... sobretot per discernir quan s'indenta amb tabuladors o bé amb espais.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    43
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    44
De tota manera, podem justificar l'ús d'indentacions més petites perquè no és el
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    45
mateix escriure en C++ que amb C; sembla una excusa, però és amb l'únic que ens
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    46
podem recolzar. Queda doncs establert, tal com es va decidir a l'explicació d'en
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    47
Shadow el dissabte, que s'utilitzarà indentació amb espais de 3 caràcters.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    48
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    49
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    50
                          2. Ample de pantalla
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    51
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    52
Molts utilitzem GUIs per escriure el nostre codi, i el fet d'estar allunyat de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    53
l'antic mode de 80x25, tenir resolucions més grans i fonts més petites ens ha
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    54
permès arribar a pantalles de 170x60. De tota manera, tot i que ens pensem que
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    55
la majoria de gent ja utilitza resolucions superiors a 1024x768, no és bo
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    56
imposar als programadors la nostra manera d'escriure codi. Encara són molts els
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    57
que programen en 80x25, més que res perquè són les dimensions dels terminals més
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    58
comuns. Són amb la que els terminals VT servien les lletres més grans
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    59
(ideals per programadors cansats), les que ens dóna la BIOS abans de l'arrencada
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    60
del sistema, i la de la majoria d'emuladors de terminal de X. A més a més,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    61
facilita molt el tenir diferents porcions de codi a la pantalla alhora. I donat
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    62
que suposem que tothom disposa de monitors de diagonal poc superior a 14", les
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    63
mides de caràcter no són massa petites per passar llargues hores davant la
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    64
pantalla.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    65
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    66
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    67
                             3. Claus {}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    68
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    69
Un altre assumpte que sol portar confusions i incomoditats només perquè hi ha
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    70
diferents estils d'escriptura de codi és la col·locació de les claus d'inici i
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    71
fi de bloc. Seguint les indicacions de Kernighan i Ritchie, l'estil preferit és
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    72
el de posar la clau d'obertura a final de línia, i la de tancament indentada a
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    73
la mateixa columna que el que ha iniciat el bloc:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    74
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    75
   if (x == 1) {
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    76
      printf("Hola");
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    77
   }
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    78
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    79
Tot i això hi ha un cas especial, les funcions. Tenen la clau d'obertura a
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    80
l'inici de la següent línia, així:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    81
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    82
   int funcio(int x)
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    83
   {
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    84
      return 2*x;
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    85
   }
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    86
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    87
A molts no ens agrada aquesta aquesta inconsistència, però té una justificació:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    88
les funcions no es poden aniuar. El fet d'utilitzar sempre l'obertura de clau a
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    89
la pròxima línia també fa que en aquesta línia no hi hagi res més escrit mai, i
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    90
porta a problemes de lectura, com en els casos:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    91
	
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    92
	do
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    93
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    94
		printf( "%i\n", i );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    95
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    96
	while( i < 10 );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    97
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    98
o bé,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
    99
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   100
	if( i > 10 )
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   101
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   102
		printf( "i gran\n" );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   103
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   104
	else
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   105
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   106
		printf( "i petita\n" );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   107
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   108
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   109
coses que evidentment queden molt més clares així:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   110
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   111
	do {
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   112
		printf( "%i\n", i );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   113
	} while( i < 10 );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   114
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   115
o bé
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   116
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   117
	if( i > 10 ) {
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   118
		printf( "i gran\n" );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   119
	} else {
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   120
		printf( "i petita\n" );
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   121
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   122
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   123
El més important és que no quedin línies buides, ja que hem de pensar en les 25
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   124
línies, a part de les 80 columnes. Al deixar menys línies buides permet
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   125
reaprofitar aquestes línies de pantalla que no perdem per a afegir comentaris.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   126
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   127
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   128
                        4. Espaiat d'expressions
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   129
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   130
Les expressions poden arribar a ser molt críptiques si no estan ben espaiades (o
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   131
gens). Per tant, adoptarem la regla general de posar un espai entre cada valor
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   132
(immediat o variable) i el seu operador binari, i no posar cap espai entre un
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   133
operador unari i el valor a què afecta. Si les variables no fan servir caràcters
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   134
més enllà dels alfanumèrics, això no hauria de suposar cap problema de lectura.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   135
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   136
El pas de paràmetres en una crida a una funció, així com a la seva definició, es
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   137
farà enganxant el parèntesi d'obertura al nom de la funció, i els paràmetres el
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   138
seguiran començant amb un espai de separació entre aquest parèntesi i el primer,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   139
i els següents aniran succeint com si d'un text redactat es tractés. Entre
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   140
l'últim paràmetre i el parèntesi de tancament hi haurà, com en l'obertura, un
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   141
espai de separació.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   142
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   143
En el cas de no haver-hi paràmetres, podem utilitzar () enganxat al nom de la
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   144
funció.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   145
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   146
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   147
                       5. Definició de variables
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   148
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   149
Alguns caràcters especials defineixen variables com a punters o referències als
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   150
tipus de dades amb què les declarem. Considerarem que aquests caràcters no són
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   151
operadors unaris, i són una dada més alhora de definir el paràmetre. Per tant,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   152
s'escriuran un espai després del tipus de dades a què apunten o referencien, i
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   153
separats tans espais com calgui del nom de la variable (en el cas que alineem
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   154
definicions). Això s'aplicarà tan al cos de les funcions com a la declaració
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   155
dels seus paràmetres o valors de retorn.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   156
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   157
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   158
                            6. Nomenclatura
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   159
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   160
Queda clar que totes les funcions i variables han de tenir noms clarament
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   161
descriptius. Això sol implicar que aquests noms estiguin composats de més d'una
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   162
paraula. Seguint l'estil dels de QT, utilitzarem la tècnica de que les paraules
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   163
que composen el nom d'una class comencen totes amb majúscula (Amb una G
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   164
majúscula de Galadriel a davant en el codi del kernel). Els mètodes
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   165
s'escriuran igual que les classes, però amb la lletra de la primera paraula en
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   166
minúscula. Les variables, igual que els mètodes (moltes vegades, en programació
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   167
a objectes, no sabem si referenciem a mètodes o a variables. Això ha de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   168
mantenir-se transparent).
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   169
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   170
	class Tree
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   171
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   172
		int * firstLeaf;
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   173
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   174
	public:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   175
		void addLeaf();
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   176
	};
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   177
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   178
En el cas de parlar de comptadors o altres estructures de codi en què l'ús de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   179
les variables queda molt clar, podem utilitzar variables d'una sola lletra (i,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   180
j, k, ...), preferiblement comptant per la i i sempre en minúscula.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   181
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   182
En implementar algoritmes matemàtics també podem utilitzar variables d'una sola
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   183
lletra sempre i quan hi hagi un extens comentari amb el codi expressat
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   184
matemàticament.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   185
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   186
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   187
                         7. Classes i estructures
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   188
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   189
Entenem l'idea de Classe amb C++ com a una definició d'objectes que conté
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   190
variables i -indispensablement- mètodes. Si ens trobem davant del típic ús de C
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   191
d'una 'struct', ho declararem com a 'struct'. Queda despreciada l'estructura:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   192
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   193
	class MyClass
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   194
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   195
	public:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   196
		int   a;
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   197
		int   b;
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   198
		int * c;
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   199
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   200
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   201
Evidentment, només utilitzarem aquest concepte d'estructura si la idea d'una
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   202
"classe amb els seus mètodes" fa complicat l'ús d'aquestes dades. També hem de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   203
preveure si farà o no falta una futura encapsulació; en aquest cas declararem
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   204
una classe amb mètodes senzills.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   205
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   206
El tipus de definicions (public, protected o private, així com slots i signals)
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   207
es faran al nivell d'indentació de la funció, ja que la indentació serveix per
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   208
indicar 'blocs', i això és el que volem aquí. Podem utilitzar vàris entorns de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   209
public, protected o private per afegir claredat a la definició de la classe,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   210
utilitzant-los de separadors en les definicions de membres.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   211
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   212
Quan declarem una classe també espaiarem el nom de la classe, els
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   213
dobles dos punts i el nom del mètode. Igualment amb l'herència en la definició
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   214
de classes i en la crida a constructors de la mare.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   215
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   216
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   217
                           8. Mètodes senzills
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   218
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   219
És fàcil trobar-nos amb mètodes (i sobretot constructors) que simplement
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   220
assignen els valors dels paràmetres a variables privades de la classe. Per
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   221
evitar codi redundant, utilitzarem el mètode ja disponible en C i que s'ha
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   222
arrossegat fins a la crida de constructors de classes mare. Així que
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   223
utilitzarem:
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   224
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   225
	void MyClass :: Constructor( int _myVar )
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   226
		: mother( _myVar ), classVar( _myVar ), 
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   227
	{
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   228
		//.... codi (si cal!)....
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   229
	}
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   230
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   231
Aquestes declaracions es poden fer fins i tot (preferiblement) -inline- dins
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   232
la definició de la classe.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   233
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   234
La nomenclatura dels paràmetres de mètodes d'aquest tipus es farà utilitzant
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   235
exactament el mateix nom que la variable interna, fet amb què s'evitarà
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   236
utilitzar caràcters no alfanumèrics en la definició de variables (o altres
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   237
invents) i s'aconseguirà l'ús de l'estructura anterior. En qualsevol altre cas,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   238
s'utilitzaran recursos de 'namespace' per diferenciarles (que és el que realment
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   239
fem mentalment quan llegim codi que no compleix això).
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   240
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   241
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   242
                                 9. Funcions
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   243
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   244
Igual que amb l'indentació, hem d'evitar les funcions amb molts de paràmetres,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   245
ja que la definició i les crides ocuparien moltes columnes.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   246
Això significa que la funció és molt complexa; s'ha de derivar en funcions més
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   247
senzilles. Qualsevol ha de poder entendre una funció pel seu nom, i qualsevol
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   248
funció ha de ser prou senzilla com per ser reutilitzada al màxim. En casos en
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   249
què necessitem un codi molt ràpid, podem demanar al compilador que ens posi les
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   250
funcions 'inline'.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   251
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   252
Una funció ha de ser prou senzilla com per tenir poques variables locals. Masses
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   253
variables locals indiquen que estem fent una funció que fa masses coses. Hem de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   254
tenir en compte que una funció és una cosa que el nostre cap ha de poder
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   255
entendre al 100% en un mateix instant; no val a haver d'entendre el codi d'una
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   256
funció per parts. El límit de variables locals el posa el nostre cervell.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   257
A més, sempre ens ho hem d'imaginar amb la perspectiva amb què veiem un codi fet
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   258
fa dues setmanes, no amb la del moment d'escriure'l.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   259
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   260
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   261
                           10. Comentaris
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   262
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   263
És molt bo que hi hi hagi comentaris en el que escrivim, sobretot per
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   264
ajudar-nos a entendre què fa un tall de codi. Això és molt important si volem
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   265
agafar una idea de com resol un problema una funció, sense haver d'entendre al
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   266
100% com ho fa.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   267
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   268
És molt típic el problema de posar més comentaris del compte, sobretot en
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   269
programadors novells. Només s'ha de tenir en compte una regla: no expliqueu COM
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   270
resol el problema el vostre tall de codi. Simplement expliqueu QUÈ resol, o fins
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   271
i tot doneu una referència a un mètode conegut. Però sobretot, no expliqueu mai
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   272
COM ho feu. El codi ha de ser prou bo com perquè el que vulgui saber COM es fa,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   273
ho entengui llegint-lo.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   274
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   275
(MANIES DE FER LLARGS SEPARADORS HORITZONTALS ENTRE COSES !? )
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   276
(CAPÇALERES DE FITXERS, GPL, ... )
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   277
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   278
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   279
                         11. Definicions i doxygen
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   280
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   281
Tots els comentaris del doxygen (així com els comentaris de mètodes, variables,
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   282
funcions, classes i enumeracions) estaran a les definicions o prototipus.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   283
Aquests seran els més restrictius; inclouran els paràmetres per defecte, i
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   284
altres informacions sobre les funcions: virtuals, estàtiques, constants...
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   285
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   286
Tots els mètodes que siguin correctes en un objecte constant, ho indicaran. Les
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   287
definicions dels que siguin reimplementables en herència, indicaran virtualitat.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   288
I les que no depenguin de les dades, indicaran estàtica.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   289
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   290
(EXPLICIT ?)
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   291
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   292
Tots els mètodes i variables que puguin ser utilitzats en herència, seran
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   293
declarats sota 'protected' en comptes de 'private'
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   294
(possiblement serà en la majoria de casos).
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   295
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   296
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   297
                               12. Encoding
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   298
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   299
Tot el codi que escrivim ha d'estar en ASCII.
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   300
Això significa oblidar els accents i caràcters per l'estil. De tota manera, de
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   301
moment podem ser menys restrictius en els comentaris i les sortides de texte; en
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   302
aquest cas utilitzarem ISO-8859-1 (aka Latin1), i totes les sortides de texte
04114bce8fd0 Initial from sourceforge's cvs.
viric@llimona
parents:
diff changeset
   303
aniran dins del pertinent mètode estàtic 'tr' de QObject (mirar docs de QT).