Jump to content

[C++] Programare eficienta si Code Style


Magnum96
 Share

Recommended Posts

1. PROGRAMARE EFICIENTA

 

 

Ceea ce am observat eu la scoala, fiind la profil matematica-informatica, e ca nu se preda programrea eficienta. Ce anume e aceasta? Adica daca am vazut ca nu stiu ce facut de XYZ si merge, nu inseamna ca e si bun.

 

Trebuie sa ne gandim la o modalitate prin care folosim cat mai putine variabile, functii, instructiuni si asa mai departe.

Cu cat avem mai putine mai putine variabile, functii, instructiuni etc. apelate, cu atat codul este mai rapid si mai bun.

 

Sa va dau un exemplu: Daca dorim sa facem o verificare "true / false", in loc sa folosim o variabila de tip "int", mai bine utilizam o variabila de tip "bool". Ce este o variabila de tip bool? Variabila de tip bool are 2 valori: true (adevarat) sau false (fals). De ce? Pentru ca o variabila de tip bool ocupa un spatiu in memorie considerabil mai mic fata de variabila de tip int.

 

Evitati citirea variabilelor globale, daca acestea nu necesita o utilizare globala. In cazul acesta, le utilizati ca variabile locale. Cei care nu stiu diferenta dintre o variabila locala si una globala, va explic: variabila globala are o utilizare pe tot parcursul programului, nu doar intr-o anumita functie, in timp ce variabila locala are o utilizare doar intr-o anumita functie (spre exemplu functia "main()" pe care o utilizam toti).

 

 

2. CODE STYLE

 

 

In primul rand, eu recomand ca atunci cand scrieti un program, sa nu scrieti variabilele in urmatorul fel:

int a;
int b;
int c;

De ce? Pentru ca programul devine mai lent. Cel mai bine e in acest fel:

int a, b ,c;

De asemenea, cand chemati o functie in mod repetat, care nu isi schimba valoarea, mai bine salvati valoarea functiei intr-o variabila (evident, daca functia este de timp int, care returneaza o valoare). Cand compilam un script, codul nostru nu ramane asa cum il stim. Compilatorul incearca sa ramifice codul. Dar cel mai bine este sa evitam o multime de ramificari.

 

Codul acesta:

if (functie() == 1)
{
//etc  
}
else if (functie()  == 2)
{
//etc  
}
else if (functie()  == 2)
{
//etc  
}

Se compileaza asa:

APELARE functie
COMPARARE + RAMIFICARE
APELARE functie
COMPARARE + RAMIFICARE
APELARE functie
COMPARARE + RAMIFICARE

Pentru a rezolva asta, creem o variabila in care salvam valorea returnata a functiei:

int variabila = functie();
if (variabila == 1)
{
//etc
}
else if (variabila == 2)
{
//etc
}
else if (variabila == 3)
{
//etc
}

Astfel, la compilare va arata cam asa:

APELARE functie
COMPARARE + RAMIFICARE
COMPARARE + RAMIFICARE
COMPARARE + RAMIFICARE

Eu zica ca este o diferenta. La programe mici, acest lucru nu este semnificativ, dar de exemplu la jocuri, un joc bine optimizat, necesita un spatiu mai mic, procesor mai slab etc. Spre exemplu, GTA IV a fost foarte prost optimizat pentru PC, de aceea a avut la vremea sa cerinte relativ mari, si chiar si cu cerintele de sistem avute, in unele momente a avut scaderi de FPS. Toate din cauza acestui fenomen ce v-am explicat eu mai sus. Un bun programator tine minte si utilizeaza aceste aspecte.

 

Inca ceva legat de stilul codului tau, este faptul ca parantezele trebuiesc puse cat mai la vedere. Asta tine de placul fiecaruia, eu unul mi-am abordat un stil prin care pot sa urmaresc fara probleme codul meu. Retineti: nu altii trebuie sa inteleaga ce este acolo, ci tu.

 

De exemplu, stilul meu de cod este:

#include <iostream>

using namespace std;

int functie(int a)
{
    a+=1;
    if (a == 3)
    {
        return 3;
    }
    else return a;
}
int main()
{
    int a;
    cout<<"a="; cin>>a;
    cout<<functie(a);
}

Spre deosebire de altii care fac totul anapoda (dupa parerea mea). Adica:

#include <iostream>
using namespace std;
int functie(int a){
    a=a+1;
    if (a == 3) return 3;
    else return a;}
int main()
{
    int a,b;
    cout<<"a="; cin>>a;
    b=functie(a);
    cout<<b;
    return 0;
}

Si cateva prescurtari ar fi:

a+=1; sau a++; este la fel cu a=a+1;
a-=1; sau a--; este la fel cu a=a-1;

Va multumesc pentru atentie, chiar sper ca ati invatat cate ceva din acest tutorial, eu cred ca sunt aspecte foarte importante pentru un programator.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.