First, solve the problem. Then, write the code (John Johnson)

Standarde de codare

Posted: September 5th, 2009 | Author: M.B. | Filed under: Articole, PHP | 4 Comments »

În toate limbajele de programare există aşa numitele „Standarde de codare” (sau Coding Standards). În general există 2 standarde de codare, diferenţa constând în felul în care sunt poziţionate acoladele:

Primul stil (C++ Coding Standards):

function foo()
{
    echo 'bar';
}

După cum se observă, peste tot pe unde este necesară deschiderea unei acolade, aceasta se poziţionează pe rândul următor, închiderea ei făcându-se cu un rând mai jos decât ultima linie de cod a blocului respectiv, pe aceeaşi linie verticală cu perechea ei de începere. Foarte pe larg aici.

Un exemplu complet de cod scris în acest stil ar putea arăta aşa:

public function setParams( $params )
{
    if ( empty( $params ) )
    {
        $this->__request['params'] = null;
    }
    else
    {
        $keys = $values = array();
        $count = count( $params );

        for( $i = 0; $i < $count; $i++ )
        {
            $param = $this->getAlpha( $params[$i] );
            $i % 2 == 0 ? $keys[] = $param : $values[] = $param;
        }

        $this->__request['params'] = array_combine( $keys, $values );
    }
}

Avantaje:

  • Lizibilitate sporită
  • Urmărire rapidă a codului, acoladele fiind poziţionate pe aceeaşi linie verticală

Dezavantaje:

  • Număr de linii mai mare ocupat de cod

Cel de-al doilea stil (PEAR style):

function bar() {
    echo 'foo';
}

În acest caz, deschiderea acoladelor se face pe acelaşi rând cu instrucţiunea, iar închiderea ei se face la fel ca în primul caz. Descriere completă aici.

Un exemplu complet de cod s cris în acest stil ar putea arăta aşa:

public function relative($offset) {
    // which absolute row number are we seeking
    $pos = $this->cursorPos + ($offset - 1);
    $ok = $this->seek($pos);

    if ($ok === false) {
        if ($pos < 0) {
            $this->beforeFirst();
        } else {
            $this->afterLast();
        }
    } else {
        $ok = $this->next();
    }

    return $ok;
}

Avantaje:

  • Număr de linii mai mic ocupat de cod

Dezavantaje:

  • Lizibilitatea este scăzută
  • Codul este greoi de urmărit, un factor fiind chiar poziţionarea acoladelor pe diagonală

Pentru mine, cel mai bun stil de programare (şi cel pe care de altfel îl folosesc) este primul dintre cele două. Un prim factor în alegerea acestui stil a fost scrierea de cod curat şi uşor de urmărit, care să nu obosească ochii. Pe urmă, eu începând programarea cu C++, am utilizat intens acest stil şi m-am obişnuit cu el fără probleme.

Însă aceste standarde nu sunt bătute în cuie. Fiecare îşi poate defini propriul standard, pornind de la cele două şi adaptând după cum se simte mai bine. De exemplu, după cum se observă şi în a doua bucată de cod postată mai sus, eu am decis a utiliza şi o spaţiere permanentă, tocmai pentru a spori gradul de lizibilitate (pe larg despre stilul ăsta aici).

Tags: , ,

4 Comments on “Standarde de codare”

  1. 1 Andrei B said at 6:18 pm on February 8th, 2010:

    Eu sunt adeptul unui hibrid intre 1 si 2 si anume: imi place ca prima acolada sa fie in rand cu expresia care o deschide, dar ultima neaparat sa aibe propriul ei rand, pe care sa nu mai fie nimic.
    In felul asta reduci la jumate randurile pe care le-ai pierde punand si primele acolade separat, iar in acelasi timp lizibilitatea e obtinuta prin alinierea la stanga pe niveluri de executie a instructiunilor. Rezulta un cod destul de compact si usor de urmarit, care pe mine personal ma face sa ignor acoladele si sa vad usor nivelurile de executie.

  2. 2 M.B. said at 6:50 pm on February 8th, 2010:

    sigur, după cum spuneam, fiecare îşi defineşte propriul stil pornind de la cele de mai sus :)

  3. 3 OriginalCopy said at 3:51 pm on March 16th, 2010:

    Amuzant e ca mereu la acest punct se discuta cel mai mult, desi e cea mai banala chestie.

    Oricum si eu prefer acelasi lucru ca Andrei. Un fel de “astyle –style=java”

  4. 4 Bogdan Epureanu said at 12:47 am on June 29th, 2010:

    Eu sunt obisnuit cu al doilea de la php…


Leave a Reply