Cum scriem cod frumos

Share on:

Inca de la primele bucati de cod scrise de programatori au aparut si primele probleme. De cand au aparut primii programatori a aparut si codul scris urat.

Cred ca fiecare carte respectabila de programare care explica de la inceput un limbaj se afla doua elemente importante, comentariile si reguli generale de scriere.

Eu la inceputurile mele de programare evident nu puneam nici un comentariu si nici nu ma omoram sa aranjez codul, toate astea pentru ca ma interesa sa mearga si… cam atat (mai ales ca nuprea mergeau din prima). Cu cat incepi sa lucrezi mai mult pe bucati de cod scrise de altii, incepi sa intelegi de ce sunt o inventie atat de buna comentarile si aranjarea in pagina.

De ce sa pierzi vremea ca sa aranjezi codul si sa-l comentezi? Hmmm, din perspectiva mea, pentru ca nu-mi place sa pierd vremea cautand bug-uri si incercand sa-mi dau seama ce am facut acum o gramada de vreme, sau chiar saptamana trecuta, orice programator prefera sa scrie cod nu sa-l repare. Munca pe care o depui acum o sa-ti fie rasplatita in timp.

Sa luam un exemplu:

1while($row= mysql_fetch_array($rez))
2   {
3   $dump=$row["ceva"];
4   $$dump =$row["altceva"];
5   }
6   $name=basename($_SERVER["PHP_SELF"]);
7   $query = 'select t.ceva, sum(a.altceva) as REZ from tabela t, altatab a WHERE
8adresa="'.$name.'" and t.val1=a.val2';
9$result = mysql_query($query);

Se intelege repede din codul de mai sus care este rezultatul. Dar daca acest cod este ascuns printre alte cateva sute/mii de linii de cod, deja nu se mai intelege nimic.

Cateva probleme:

  • codul nu este ordonat, macar daca nu il comentezi ARANJEAZA-L!!! Nu te gandi niciodata ca o faci pentru altcineva, de cele mai multe ori tot eu fac debuging pe un script facut de mine, dar cand trebuie sa urmaresc logica altcuiva… ganduri necurate imi strabat mintea.
  • fii consistent, in general atunci cand lucrez pe un script care nu e facut de mine incerc sa pastrez consistenta modului de scriere (daca exista) a celui care a scris bucata de cod, asa nu o sa trebuiasca sa urmaresti doua moduri de scriere iar totul o sa fie mult mai vizual.
  • scrierea conform standardului, chiar ieri aveam o discutie despre diferenta intre JOIN si conditie in WHERE in Oracle, concluzia a fost ca nu reduc performanta. Trebuie sa recunosc, nici eu nu foloseam aceasta tehnica pana nu de mult, dar o interogare scrisa aranjat o sa fie mult mai usor de inteles ulterior. Chiar daca nu o faci conform standardului, macar sa fie aranjata, cand sari de doua tabele si ai gresit ceva o sa fie mult mai usor sa urmaresti ce ai facut.
  • scrie interogarile pe mai multe linii. MySQL nu intoarce erori explicite de multe ori, spune doar zona in care a gasit o eroare, atunci cand sunt pe mai multe linii vei afla si linia cu probleme. Un alt mare avantaj este ca poti sa comentezi cu usurinta o linie.

Varianta “frumoasa” a codului de mai sus ar fi ceva de genul:

 1while($row = mysql_fetch_array($rez)) {
 2  $dump = $row["ceva"];
 3  $$dump = $row["altceva"];
 4}
 5
 6$name = basename($_SERVER["PHP_SELF"]);
 7
 8$query = "SELECT t.ceva, SUM(a.altceva) AS rez
 9          FROM tabela AS t, altatab AS a
10          WHERE adresa='".$name."'
11          AND t.val1=a.val2";
12$result = mysql_query($query);

Parca arata altfel nu? Evident se poate aranja si mai mult dar eu unul sunt multumit daca gasesc asa ceva in codul altcuiva.

Un blog interesant despre Lazy Ones (lenesi) este aici.