This is an old revision of the document!


Coding style

Codul pe care îl scriem nu este suficient să ruleze corect, el trebuie să și îndeplinească anumite standarde de claritate, concizie si lizibilitate. Fie că lucrăm într-o companie în care mai multe persoane editează același fișier sau ne uităm peste o bucată de cod scrisă cu mult timp în urmă, caracteristicile menționate mai sus trebuie să creeze un standard care sa ajute la o viteză mare de înțelegere a aspectelor codului.

Bineînțeles, fiecare limbaj care un coding style propriu, anumite companii pot avea regulile lor, iar fiecare persoană poate avea un stil propriu, dar totuși există un set de reguli generale ce trebuie urmat.

  • Alegeți nume sugestive de variabile si functii. Observati diferența dintre cele doua funcții de mai jos:
asa_nu.c
void f(char* a, char* b, char* c) {
  printf("Date personale: %s %s %s\n", a, b, c);
}
asa_da.c
void printPersonalData(char* firstName, char* lastName, char* birthDate) {
  printf("Date personale: %s %s %s\n", firstName, lastName, birthDate);
}

În cazul primei funcții, nu ne puteam da seama de conținutul variabilelor a, b, și c decât dupa rulare (și chiar și asa, tot ar fi existat cazuri în care apăreau confuzii sau neclaritați). De asemenea, numele functiei ar trebui să fie destul de sugestiv astfel încât să nu fie nevoie să ne uităm la corpul său pentru a ne da seama ce face acesta.

  • Folosiți spații între operatori și în cadrul structurilor
asa_nu.c
if(i>=2&&(j<=1||(c+d>4))){
  printf("%d",v[a[i+j]+max(c,d+3)]);
}
asa_da.c
if (i >= 2 && (j <= 1 || (c + d > 4))) {
  printf("%d", v[a[i + j] + max(c, d + 3)]);
}

Care dintre cele două bucăți de cod arată mai aerisit și mai ușor de înțeles :)?

De asemenea, lăsați rânduri libere pentru a delimita paragrafe “logice” de cod sau diverse definiții de funcții.

Nu uitați, s-ar putea ca și alte persoane să vă citească codul (sau poate chiar voi peste mult timp), așa că scrieți-l într-o manieră aerisită și ușor de urmârit!

“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”

  • Folosiți o indentare buna! De regulă, dimensiunea tab-ului se stabilește la 2 sau 4 spații (dupa preferințe). Folosiți acelasi numar de spații pentru un tab peste tot! Corpul funcțiilor, al instrucțiunilor if-else, for, while trebuie indentat cu un tab in plus față de indentarea funcției sau a instrucțiunii. Evitați scrierea mai multor instrucțiuni pe aceeași linie, nu are nici un avantaj acest lucru, dati enter si continuați pe urmatoarea linie. Se preferă folosirea spațiilor efective in loc de tab (\t), deoarece dacă vă deschideți codul cu un alt editor sau pe un alt calculator, s-ar putea sa aveți surpriza ca tab-ul să fie setat la 8 spații în loc de 4 :), și întregul fișier să arate cu totul diferit față de ce ați scris voi.
void example() {
  int a = 2, b = 2;
 
  for (...) {
    if (...) {
      instr1;
      instr2;
    } else if (...) {
      instr3;
    }
 
    instr4;
 
    while (...) {
      instr5;
      instr6;
    }
  }
}
  • Folosiţi acolade chiar şi pentru blocurile de o singură instrucţiune. De ce? Claritatea este sporită, iar în cazul în care dorim să mai adăugăm înca nişte instrucţiuni blocului curent să nu fie nevoie să scriem şi acoladele (sau mai rău, sa uităm să le punem şi sa trăim cu impresia sa respectivele instruţiuni fac parte din blocul curent).
  • Definiți constante în programul vostru și folosiți-le. De ce? Pe de o parte claritatea, este mult mai ușor să înțelegi ce semnifică constanta PI decât 3.14, și pe de altă parte sunt mult mai ușor de modificat (mai bine modifici într-un singur loc decât de x ori în tot programul).
if (i < 10) {
 ...
}
#define MAX_NR_PERSONS 10
 
if (i < MAX_NR_PERSONS) {
 ...
}
  • Codul vostru nu trebuie să conțină linii mai lungi de 80 de caractere. Daca aveți astfel de linii, spărgeți-le în mai multe. Exemple:
  if (nr_persons < MAX_NR_PERSONS && avg_age > 18 &&
      (send_email == true || send_sms == true ||
      send_mail == true)) {
    ...
  }
  printf("Acest printf contine foarte multe caractere "
         "asa ca m-am hotarat sa il impart pe mai multe "
         "linii astfel incat coding style-ul sa fie bun");
  functionWithLotsOfParameters(
    parameter1,
    parameter2,
    parameter3,
    parameter4,
    parameter5
  );
  • Comentați-vă codul! Folosiți destule comentarii cât să asigurați o bună înțelegere a codului, dar nici prea multe, comentând lucruri banale, cum ar fi incrementarea unei variabile. Este recomandat sa dați fiecărei funcții o scurtă descriere legată de ce face acea funcție, explicați porțiuni de cod mai greu de înțeles, sau argumentați semnificația parametrilor transmiși unei funcții (dacă denumirea acestora nu este suficientă).
  • Evitați folosirea variabilelor globale. În schimb, transmiteți variabile prin referință funcțiilor ce urmează să le modifice (astfel se observă clar fiecare funcție cu ce variabile lucrează, și împiedică modificarea accidentală a unei variabile globale într-un loc greșit).
  • Iar, la final, o organigramă despre cum să scriem “good code” :)

programare-ca/coding-style.1348844227.txt.gz · Last modified: 2012/09/28 17:57 by andrei.parvu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0