Top 5 erori de programare in Java

Toata lumea greseste. Chiar si programatori foarte competenti. Uneori acest lucru se intampla din neatentie sau un API neclar. Insa acest gen de greseli sunt rare. Cele mai comune greseli de programare sunt cauzate de cunostinte insuficiente sau abilitati care nu sunt suficient dezvoltate.

Apr 12, 2016 2738
Toata lumea greseste. Chiar si programatori foarte competenti. Uneori acest lucru se intampla din neatentie sau un API neclar. Insa acest gen de greseli sunt rare. Cele mai comune greseli de programare sunt cauzate de cunostinte insuficiente sau abilitati care nu sunt suficient dezvoltate.

In acest articol voi discuta despre cele mai comune greseli de programare pe care le-am intalnit in cariera mea. Sper ca experientele mele sa va ajute sa reduceti numarul de buguri in proiectele voastre.

Prima eroare despre care vreau sa vorbesc este modul in care sunt denumite elementele de cod. Fiecare variabila, metoda, clasa sau pachet ar trebui sa aiba un nume clar care sa arate rolul ei. Cum putem sa verificam asta? Poti sa te uiti peste un cod pe care l-ai scris acum 6 luni si pe care nu l-ai mai verificat. Poti sa iti amintesti ce face fiecare element din cod?

Un nume sau identificator eficient este usor de facut. Foloseste aceleasi cuvinte pe care le-ai folosi ca sa descrii elementul de cod. Spre exemplu:

errors in Java 1.png
Cat de repede iti dai seama ce face aceasta bucata de cod? Poti sa o folosesti? Cum ar trebui sa il implementezi? Raspunsul la aceste intrebari nu are cum sa apara daca nu cunosti autorul codului. Insa toate aceste intrebari dispar daca scrii codul asa:

errors in Java 2.png
Cea de-a doua eroare comuna consta in nerespectarea unuia dintre principiile OOP – incapsularea. Nu trebuie niciodata sa accesezi atributele altor obiecte – direct sau indirect. Singura exceptie pentru aceasta regula este prezentarea datelor pentru layerul UI sau trimiterea catre layer-ul DAO. Spre exemplu:

errors in Java 3.png
Chiar daca apelam getters si nu accesam campurile din clasa User, nu respectam procesul de incapsulare. Nu trebuie niciodata sa poti sa vezi prezentarea datelor interne din alte clase. In schimb ar trebui sa stii ce operatiuni ofera aceasta clasa si cum sa o folosesti.

Cea de-a treia eroare este lipsa sigurantei codului tau. Sa ne uitam la exemplul de mai jos:

errors in Java 4.png
Ati scris un simplu cod de formatare a procentajelor. Este sigur? Da, nu da nici o exceptie ca rezultat. Ce facem insa daca cineva tasteaza -1, spre exemplu. Aceasta metoda produce un rezultat invalid. Ce ar fi daca am modifica astfel codul?

errors in Java 5.png

Nu va produce niciodata un rezultat invalid. Insa pur si simplu ascundem o eroare. Faptul ca avem un parametru invalid este semnul unei alte erori de programare din afara clasei. Daca avem al doilea tip de eroare nici nu vom stii acest lucru.

Cea de-a patra eroare este absenta automatizarii testarii. Oricand scrii un cod care ar trebui sa scrie un test care verifica acel cod. Daca lucrezi cu proiecte complexe sau cu sisteme legacy fara tests atunci ar trebui sa scrii teste cel putin pentru cele mai critice / folosite parti din sistemul tau.

Ultima eroare este duplicarea codului sau nerespectarea principiului DRY. De fiecare data cand copiezi o parte a codului intr-un nou loc trebuie sa tii minte ca este necesar sa modifici ambele blocuri de cod simultan. Ce faci daca ai 10 sau 100 de blocuri de acest gen? Cum poti sa le gasesti usor? Cum poti sa le gasesti daca modifici ceva minor la ele?

errors in Java 6.png
Ce inseamna 1 aici? Inseamna ca daca delta este 2 indexul trebuie sa fie 2? Valorile hard-code sunt uneori denumite numere magice si sunt o dovada ca undeva exista un duplicat.
Acestea sunt din punctul meu de vedere cele mai importante 5 erori de programare pe care le-am descoperit lucrand cu Java. Sper ca experienta mea sa va ajute sa evitati aceste provocari pe viitor.

Sergey Morenets
Software Development and Java Specialist

Daca iti place acest articol, distribuie-l si prietenilor tai!




Mai ai intrebari?
Contacteaza-ne.
Thank you.
Your request has been received.