Acolade în JavaScript

Niciodată nu mi-a plăcut codul scris foarte lăbărțat:

function foo() 
{
    //cod
}; //foo

Nu mi-a plăcut dintr-un motiv foarte simplu: lungește inutil codul și îl face un pic mai greu de citit. Desigur, cei ce scriu codul în acest fel vor sări să mă contrazică și să-mi spună că modul „celălalt” de a scrie codul este înghesuit și greu de citit (din punctul lor de vedere, desigur :D ):

function foo() {
	//cod
}; //foo

Așa cum (probabil) știi, JS este suficient de prietenos încât nu îți impune să folosești punct și virgulă la sfârșitul fiecărei instrucțiuni, ci presupune că un rând nou înseamnă sfârșitul instrucțiunii. Doar că… nu-i întotdeauna bine că se întâmplă așa. Mai ales dacă scrii lăbărțat!

Exemplu:

function foo() 
{
	return // funcția se oprește din execuție aici
	{
		foo : "bar"
	};
}; //foo
alert(foo());

Rezultă un minunat undefined, posibil generator de fire de păr alb/smuls și riduri timpurii. :D

15 Comentarii to “Acolade în JavaScript”

  1. Util de stiut, dar nu pot fi total de acord. Codul e lizibil asa cum iti place. Eu sunt din cei care scriu labartat, desi la JavaScript incerc sa pastrez acolada de deschidere pe acelasi rand. Asa l-am vazut si eu cand invatam si asa l-am preluat. Dar in PHP, urasc codul scris cu acolada pe acelasi rand. Daca ai o functie mai mare niciodata nu stii unde incepe si unde se termina.

  2. Staicu Ionuț-Bogdan

    Daca ai o functie mai mare niciodata nu stii unde incepe si unde se termina.

    Cum nu? Bracket balance/highlight există în majoritatea (toate?) editoarele :)

  3. Codul scris “labartat”, desi tine de stil, nu este mai lizibil deloc decat cel “condensat”; de ce ? in primul rand pentru ca acele randuri libere create rup continuitatea codului apoi pur si simplu textul in sine devine din ce in ce mai lung (vertical) si astfel aduce o complexitate sporita dar artificiala codului.

    Oare de ce ruby este atat de expresiv ? Simplu: se apropie cat mai mult de limbajul natural, “no fucking around”.

  4. @Marian P.: Repede cu ruby si tu. Glumesc, este superb!

  5. Am vrut sa bag in paranteza si clojure sau python pentru cei care vor sarii repede la gatul meu :))

  6. Bracket balance/highlight

    Daca vorbim de ajutorul pe care ni-l dau editoarele, orice cod e lizibil. Indiferent ce e labartat sau condensat. Eu la birou prestez cu TextPad si ala n-are, de exemplu. In fine, tot chestie de gust ramane (asta cu exceptia cazului prezentat de tine si a celor similare).

  7. Staicu Ionuț-Bogdan

    Cum n-are? :D

    Bracket Matching: Place the cursor behind a bracket, parenthesis, or curly brace and press Ctrl+M. Textpad will attempt to find the matching (opposite) bracket/parenthesis/brace and will move the cursor to that position and highlight it. Great for sifting through complex nests of if/else or variables that are getting assigned a value requiring a complex formula.

  8. Well, I guess you learn something new every day. Multam fain de pont. Pe-asta n-o stiam :)

    Da tot cred ca e mai frumos codul labartat :D

  9. Exista anumite standarde, pe care, daca vrei ca lumea care le foloseste la randul ei sa-ti inteleaga codul mai bine, le urmezi.

  10. Exista anumite standarde, pe care, daca vrei ca lumea…

    Din pacate, nu stiu sa existe standarde care sa reglementeze acoladele. Fiecare e liber sa le scrie cum vrea…

  11. Din pacate, nu stiu sa existe standarde care sa reglementeze acoladele.

    Ba da, sunt standarde care reglementeaza si acoladele :P

    In http://framework.zend.com/manual/en/coding-standard.coding-style.html de exemplu:

    la clase sau functii ai asa:

    class Foo
    {
    
    public function bar()
    {
    

    dar pt if/for/while, acoladele se scriu pe acelasi rand:

    if ($a != 2) {
        $a = 2;
    }

    Eu zic ca e bine sa urmezi un astfel de standard. Te ajuta chiar si pe tine sa iti intelegi codul mai bine.

  12. Staicu Ionuț-Bogdan

    Marian, alea sunt standarde pentru Zend Framework :)
    Dar de dragul conversației, chiar ți se pare ok ca la clase sau funcții să ai acoladele într-un fel iar la condiții/iterații să fie în alt fel?

    Plasarea acoladele și denumirea variabilelor/funcțiilor (camelCase sau_separate_prin_underscore) ține mai degrabă de un standard intern, al echipei în care lucrezi. Din fericire, am fost suficient de norocos să nu mi se impună un anume stil până acum. :)

  13. Da, sunt standarde pentru Zend Framework, dar se pot folosi la fel de usor si pentru PHP in general (Zend Framework fiind scris in PHP) sau pentru oricare alt limbaj de programare asemanator. Eu unul stilul asta-l folosesc.

    Dar de dragul conversației, chiar ți se pare ok ca la clase sau funcții să ai acoladele într-un fel iar la condiții/iterații să fie în alt fel?

    Da, mi se pare ok. Este totusi o diferenta intre functii/clase si conditii/iteratii.

    Si indiferent de standard, daca e unul intern sau mai larg folosit, e bine de urmat unul, nu sa scrii intr-o parte codul intr-un fel, iar in alta parde in alt fel.

  14. Staicu Ionuț-Bogdan

    Da, sunt standarde pentru Zend Framework,

    Păi un pic mai spui spuneai că sunt standarde și… atât. Când spui asta, se cam subînțelege că sunt standarde în general.

    nu sa scrii intr-o parte codul intr-un fel, iar in alta parte in alt fel.

    CORECT! A trebuit să fac modificări după un singur programator care folosea diverse combinații în functie de pagină. Și acum mai am coșmaruri! :D

  15. Păi un pic mai spui spuneai că sunt standarde și… atât. Când spui asta, se cam subînțelege că sunt standarde în general.

    N-am zis ca-i un standard in general, am zis ca-i un standard :P Dar il poti folosi si la PHP si la JS, poate si alte limbaje de programare.

    CORECT! A trebuit să fac modificări după un singur programator care folosea diverse combinații în functie de pagină. Și acum mai am coșmaruri! :D

    Exactly my point :D

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter