Stil de indentare

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Stilul de indentare în programarea computerului este un set de reguli pentru gestionarea indentării blocurilor de cod. În majoritatea limbilor, numite în formă liberă , indentarea nu are o semnificație sintactică, dar este utilizată ca notație secundară pentru a îmbunătăți lizibilitatea codului, făcând structura blocurilor care alcătuiesc executarea programului să curgă imediat vizibilă pentru programator. Unele limbaje de programare, cum ar fi Python sau Haskell , folosesc indentarea la nivel sintactic pentru a determina blocurile fără utilizarea parantezelor ( regulă off-side ), deci în astfel de limbaje indentarea nu este doar o chestiune stilistică, ci un element sintactic în din toate punctele de vedere.

Filele, spațiile și lățimea de indentare

Lățimea utilizată la indentare este de obicei dependentă de stil. În primele zile de programare, era obișnuit să folosiți filele pentru a indenta codul, deoarece permitea salvarea caracterelor și reducerea dimensiunii surselor. Pe sistemele Unix fila era de obicei echivalentă cu opt caractere, în timp ce pe Macintosh și Microsoft Windows era de obicei patru, creând confuzie atunci când sursele erau transferate și afișate pe diferite sisteme. Editorii moderni vă permit să setați lățimea filelor și să formatați filele și spațiile automat în funcție de setările dvs.

Lumea programării este împărțită în alegerea dintre tabele și spații, ceea ce în mod similar cu războiul editorilor constituie un „război al religiei” peren. Unii programatori, precum Jamie Zawinski [1], susțin că alegerea spațiilor îmbunătățește portabilitatea codului între diferite medii și platforme, în timp ce alții, cum ar fi dezvoltatorii platformei WordPress , susțin contrariul [2] . În ediția din 2015 a Stack Overflow Developer Survey , 45% dintre participanți s-au exprimat în favoarea filelor, comparativ cu 33,6% în favoarea spațiilor. [3]

Aspecte practice

Vizibilitatea blocurilor

Programatorii care se bazează pe paranteze pentru a găsi blocuri dintr-o privire pot fi penalizați de stiluri care plasează paranteze la sfârșitul declarației anterioare, în timp ce programatorii care se bazează mai mult pe indentare pot prefera aceste stiluri, deoarece generează blocuri mai compacte pe verticală.

În unele cazuri, poate deveni dificil să urmăriți vizual extinderea blocurilor de cod, în special în secțiuni mari de cod cu multe instrucțiuni compuse imbricate, care generează multe niveluri de indentare, care scot capetele blocurilor din câmpul vizual al editorului, și te fac să-ți pierzi rulmentul. Acesta poate fi un simptom al calității slabe a codului și a complexității ciclomatice excesive, care trebuie corectat prin refactorizare , descompunând funcțiile prea mari în mai multe funcții mai mici și mai lizibile. În mod similar, un număr mare de niveluri de indentare pot deplasa codul spre dreapta și îl pot face ilizibil, și este, de asemenea, un simptom al nevoii de refactorizare. De exemplu, manualul stilului kernel-ului Linux recomandă refactorizarea atunci când codul depășește trei niveluri de indentare. [4]

O modalitate de îmbunătățire a lizibilității în unele cazuri este adăugarea de comentarii care specifică la ce afirmație se referă paranteze de închidere, cu dezavantajul păstrării textului duplicat.

 for ( int i = 0 ; i < total ; i ++ ) {
    foo ( bar );
} // Pentru (i)
 if ( x < 0 ) {
   bara ( foo );
} // Dacă (x <0)

Mulți editori vă permit să localizați cu ușurință parantezele potrivite evidențiind sau animând când treceți cursorul peste o paranteză sau colorând fiecare pereche de paranteze potrivite diferit. Vim permite, folosind tasta % , să sară de la o paranteză la cea corespunzătoare. [5] Majoritatea editorilor acceptă și plierea blocurilor, permițându-vă să afișați sau să ascundeți conținutul blocurilor după cum este necesar.

Introducerea instrucțiunilor

Unele stiluri previn erorile atunci când introduceți instrucțiunile într-o poziție greșită. De exemplu, plasând în mod eronat o instrucțiune între o instrucțiune de control, cum ar fi for sau while și următoarea acoladă de deschidere a blocului corespunzător, rezultatul este că numai noua instrucțiune este de fapt iterată, în timp ce blocul se execută o singură dată la sfârșit. iterații.

 pentru ( int i = 0 ; i < 10 ; i ++ )
    whoops ( bar ); / * Inserarea în poziția greșită, se repetă de 10 ori * /
{
    only_once (); / * Acest bloc trebuie repetat de 10 ori, dar executat o singură dată * /
} // Pentru (i) <- Acest comentariu nu mai este valid și devine înșelător

Stilurile care plasează paranteze deschise la sfârșitul liniei declarației de control la care se referă pentru a preveni această problemă.

Unelte automate

Există instrumente pentru formatarea automată a codului în funcție de preferințele de indentare ale programatorului, cum ar fi comanda de indent , găsită pe multe sisteme de tip Unix .

Emacs oferă mai multe comenzi pentru a gestiona indentarea, inclusiv indentarea automată la introducerea unui retur de cărucior ( indentare electrică ), apăsând pur și simplu tasta tab pentru a indenta linia curentă și „Mx indent-region” pentru a indenta porțiuni mari de cod. În funcție de setările dvs., Emacs poate înlocui spațiile de indentare cu file, eventual urmate de spații, pentru a minimiza numărul de caractere. [6]

Vim vă permite să definiți reguli de indentare specifice pentru fiecare limbă și apoi să le aplicați automat în timpul scrierii codului. De asemenea, vă permite să selectați utilizarea spațiilor sau filelor pentru indentare și să convertiți automat o selecție de cod în funcție de setările actuale utilizând comanda :retab , precum și să reformatați și să reintroduceți o selecție de cod apăsând tasta = în modul vizual cheie .

" Tabstops-urile elastice " este un stil de tabulare care vă permite să păstrați automat blocuri întregi de cod aliniate atunci când indentarea unei singure linii care face parte din bloc este modificată și necesită sprijinul editorului.

Stiluri de indentare

Stil K&R

Stilul K&R, numit după Brian Kernighan și Dennis Ritchie , autori aiLimbajului de programare C , este frecvent utilizat în programarea în C și derivate. Cartea nu-și specifică propriul stil în mod explicit, dar o urmează în mod consecvent. O notă specifică:

( EN )

„Poziția aparatelor dentare este mai puțin importantă, deși oamenii dețin credințe pasionale. Am ales unul dintre mai multe stiluri populare. Alegeți un stil care vi se potrivește, apoi folosiți-l în mod constant. "

( IT )

„Poziția parantezelor este mai puțin importantă, deși oamenii au convingeri puternice. Am ales unul dintre mai multe stiluri populare. Alegeți un stil care vi se potrivește și folosiți-l în mod constant. "

( Brian Kernighan și Dennis Ritchie ,Limbajul de programare C )

Dispozitivul de deschidere al corpului unei funcții se află pe linia care urmează antetul funcției, la același nivel de indentare ca antetul, în timp ce pentru blocuri se află pe aceeași linie cu instrucțiunea la care se referă, precedată de un spațiu. Parantezele de închidere respective se află pe o nouă linie, la același nivel de indentare ca parantezele de deschidere corespunzătoare sau declarația acesteia. Dacă paranteze de închidere este urmată de un else cuvânt cheie sau while , acesta din urmă se află pe aceeași linie.

 int main ( int argc , char * argv [])
{
    ...
    while ( x == y ) {
        ceva ();
        somethingelse ();

        if ( some_error ) {
            do_correct ();
        } altceva {
            continue_as_usual ();
        }
    }

    finalthing ();
    ...
}

Stil kernel

Stilul kernel este o variantă a K&R utilizat pe scară largă în sursele kernel Linux . Linus Torvalds recomandă insistent contribuitorilor să se mențină. O descriere detaliată a stilului (care nu se referă numai la indentare, dar acoperă și convențiile pentru alegerea identificatorilor, comentariilor și alte aspecte) este disponibilă la kernel.org. [7]

Stilul folosește file (lungime de opt caractere) pentru indentare. Acoladele deschise în definițiile funcției sunt plasate pe o nouă linie, în timp ce în toate celelalte cazuri, cum ar fi blocurile, sunt pe aceeași linie de deschidere ca instrucțiunea, precedată de un spațiu. Etichetele unui switch sunt aliniate cu blocul care le cuprinde. Un bloc format dintr-o singură linie nu trebuie să fie închis între paranteze buclate, dar, în cazul în care o altă ramură a aceleiași instrucțiuni o cere (de exemplu într-un if-else ), atunci toate ramurile trebuie să fie închise între paranteze buclate. Lungimea liniei este limitată la 80 de caractere.

 puterea int ( int x , int y )
{
        int rezultatul ;

        if ( y < 0 ) {
                rezultat = 0 ;
        } altceva {
                pentru ( rezultat = 1 ; y ; y - )
                        rezultat * = x ;

        }
        rezultatul returului ;
}

1TBS

Susținătorii acestui stil se referă uneori la acesta ca „singurul stil adevărat de bretele” [8] (prescurtat la 1TBS sau OTBS). Principala diferență cu stilul K&R este că parantezele cretate nu sunt omise în blocurile cu o singură linie. Sursele kernel-ului Unix [9] adoptă acest stil.

În acest stil, constructele care permit inserarea de noi linii de cod sunt pe linii separate, în timp ce cele care îl interzic sunt pe aceeași linie, astfel încât inserarea unei noi linii în orice poziție este „sigură”, adică inserarea accidentală în o poziție nedorită menține în continuare coerența între fluxul de execuție și indentare.

 // ...
    if ( x < 0 ) {
        pune ( „Negativ” );
        negativ ( x );
    } altceva {
        put ( "Non-negativ" );
        non-negativ ( x );
    }

Deși programele Java sunt de obicei formatate în funcție de alte stiluri, există o anumită cantitate de cod Java formatat în funcție de variații minore ale stilului K&R (cu parantezele de deschidere pe aceeași linie în declarațiile de clasă și metodă), în principal datorită specificațiilor inițiale orientări stilistice.de Sun Microsystems [10] [11] [12] și adoptate de majoritatea bibliotecii Java Class . Este, de asemenea, un stil popular în ActionScript și JavaScript , împreună cu stilul Allman .

Stroustrup

Stilul Stroustrup este o adaptare Bjarne Stroustrup a stilului K&R pentru limbajul C ++ , folosit în cărțile sale Programare: Principii și practică folosind C ++ și Limbajul de programare C ++ . [13]

Spre deosebire de original, Stroustrup nu plasează celălalt pe aceeași linie cu paranteze de închidere care o precedă [13]

 if ( x < 0 ) {
        pune ( „Negativ” );
        negativ ( x );
    }
    altceva {
        put ( "Non-negativ" );
        non-negativ ( x );
    }

Stroustrup extinde stilul K&R pentru clase, fără a indenta etichete public: : private: și similare. În timp ce parantezele de deschidere ale corpului unei funcții sunt pe aceeași linie cu antetul, în cazul unei clase se află pe următoarea linie. De asemenea, funcțiile foarte scurte pot fi scrise într-un singur rând.

 clasa Vector { 
    public:
        Vector ( int s ) : elem ( new double [ s ]), sz ( s ) { } // Construiește un vector
        double & operator [] ( int i ) { return elem [ i ]; } // Acces element: subscriere
        int size () { return sz ; } 
    privat :
        elem dublu [lowast]; // Pointer către elemente
        int sz ; // Numărul de elemente
    };

Stil Allman

Stilul Allman poartă numele lui Eric Allman . Este, de asemenea, cunoscut sub numele de „stil BSD”, deoarece Allman a scris multe utilități BSD Unix , dar diferă de stilul BSD KNF . Acoladele de deschidere asociate cu o instrucțiune de control al fluxului sunt pe o nouă linie, la același nivel de indentare ca instrucțiunea, în timp ce instrucțiunile din bloc au un nivel de indentare mai mare.

 while ( x == y )
{
    ceva ();
    somethingelse ();
}

finalthing ();

Acest stil este analog cu cel utilizat în mod obișnuit în Pascal și Transact-SQL , unde parantezele sunt înlocuite evident cu cuvintele cheie de begin și de end .

 (* Exemplu de indentare Allman în Pascal *)
proceduri de dozare ( x : întreg , y : întreg )
începe
    în timp ce x = y do
    începe
        ceva ;
        altceva
    Sfârșit
Sfârșit

Printre presupusele avantaje ale acestui stil se numără faptul că codul indentat este clar separat de instrucțiunea care conține, facilitând în același timp identificarea perechilor de paranteze potrivite, facilitând înlocuirea sau comentarea instrucțiunilor. plasarea parantezelor cretate pentru funcții și blocuri este consecventă.

De exemplu, următorul fragment este valid:

 // În timp ce (x == y)
{
    ceva ();
    somethingelse ();
}

în mod similar cu următoarele:

 // Pentru (int i = 0; i <x; i ++)
// În timp ce (x == y)
if ( x == y )
{
    ceva ();
    somethingelse ();
}

sau următoarele, care utilizează compilarea condiționată:

 int c ;
#ifdef HAS_GETCH
    while (( c = getch ()) ! = EOF )
#else
    while (( c = getchar ()) ! = EOF )
#endif
    {
        face_ceva ( c );
    }

O variantă, numită Allman-8, folosește coloane de 80 de caractere și indentare de 8 spații.

Stil BSD KNF

De asemenea, cunoscut sub numele de Kernel Normal Form , este stilul folosit în majoritatea codului sistemului de operare BSD . Deși este destinat în principal codului kernel, acesta este, de asemenea, utilizat pe scară largă în codul spațiului utilizatorilor. Este practic o variantă atent documentată a stilului K&R, utilizată în sursele Bell și Labs UNIX versiunile 6 și 7. [14]

Kernel-ul SunOS și software-ul userland folosesc un stil similar, [14] bazat și pe documentația stilului AT&T, denumită uneori Bill Joy Normal Form. [15] Orientările SunOS au fost publicate în 1996. Corectitudinea indentării poate fi verificată. folosind utilitarul cstyle . [16]

Fila hard, utilizată pentru indentarea blocului ( ts în vim ) este de 8 coloane, iar fila soft (utilizată pentru continuarea pe mai multe linii, sw in vim) este 4. Apelurile funcționale nu așteaptă un spațiu înainte de paranteză, care trebuie să fie inserat în loc dacă parantezele rotunde sunt precedate de un cuvânt cheie, cum ar fi if , în while , do , switch și return . Funcțiile care nu declară variabile locale trebuie să lase o linie necompletată după deschiderea parantezei blocului care alcătuiește corpul funcției.

 while ( x == y ) {
        ceva ();
        somethingelse ();
}
finalthing ();

 if ( date ! = NULL && res > 0 ) {
        if ( JS_DefineProperty ( cx , o , "date" ,
            STRING_TO_JSVAL ( JS_NewStringCopyN ( cx , date , res )),
            NULL , NULL , JSPROP_ENUMERATE ) ! = 0 ) {
                QUEUE_EXCEPTION ( "Eroare internă!" );
                go go ;
        }
        PQfreemem ( data );
} altceva {
        if ( JS_DefineProperty ( cx , o , "date" , OBJECT_TO_JSVAL ( NULL ),
            NULL , NULL , JSPROP_ENUMERATE ) ! = 0 ) {
                QUEUE_EXCEPTION ( "Eroare internă!" );
                go go ;
        }
}

 static JSBool
pgresult_constructor ( JSContext * cx , JSObject * obj , uintN argc ,
    jsval * argv , jsval * rval )
{

        QUEUE_EXCEPTION ( „Clasa PGresult nu este instantanabilă de utilizator” );

        return ( JS_FALSE );
}

Stilul albilor

Stilul Whitesmiths, numit și stilul Wishart, a fost folosit în documentația primului compilator C comercial. De asemenea, a fost popular la începutul dezvoltării Windows , deoarece a fost adoptat de trei publicații majore, Ghidul programatorului pentru Windows de Durant , Carlson și Yao , Programarea Windows de Petzold și Windows 3.0 Power Programming Techniques de Norton și Yao .

Împreună cu stilul Allman, stilul Whitesmiths este considerat cel mai comun în Jargon File . [17]

Parantezele de deschidere ale unui bloc de instrucțiuni de control se află pe o nouă linie, iar parantezele sunt indentate la același nivel cu conținutul blocului.

 while ( x == y )
    {
    ceva ();
    somethingelse ();
    }

finalthing ();

Un exemplu:

 if ( date ! = NULL && res > 0 )
    {
    if ( ! JS_DefineProperty ( cx , o , "date" , STRING_TO_JSVAL ( JS_NewStringCopyN ( cx , data , res )),
                           NULL , NULL , JSPROP_ENUMERATE ))
        {
        QUEUE_EXCEPTION ( "Eroare internă!" );
        go go ;
        }
    PQfreemem ( data );
    }
else if ( ! JS_DefineProperty ( cx , o , "data" , OBJECT_TO_JSVAL ( NULL ),
        NULL , NULL , JSPROP_ENUMERATE ))
    {
    QUEUE_EXCEPTION ( "Eroare internă!" );
    go go ;
    }

Stil GNU

Similar stilurilor Allman și Whitesmiths, stilul GNU plasează paranteze cretate în linii separate, indentate de două spații (cu excepția definițiilor funcției, unde nu sunt indentate), [18], iar conținutul blocului are două spații suplimentare de indentare cu respect la paranteze.

Popularizat de Richard Stallman și recomandat în standardele de codare GNU , a fost probabil influențat de fundalul său de programare Lisp . [19] În definițiile funcției, parantezele de deschidere ale listei de argumente sunt precedate de un spațiu.

 caracter static *
concat ( char * s1 , char * s2 )
{
  while ( x == y )
    {
      ceva ();
      somethingelse ();
    }
  finalthing ();
}

[18]

Acest stil combină avantajele Allman și Whitesmiths, evitând în același timp posibilul dezavantaj al parantezelor indistincte din blocul pe care îl conțin. Un dezavantaj este legat de „deșeuri” datorită utilizării a două niveluri de indentare, unul dedicat doar parantezelor, pentru a indenta ceea ce logic este un singur bloc.

Steve McConnell , în cartea sa Code Complete , exprimă opoziția față de acest stil, care este considerat dăunător lizibilității codului. [20]

Stilul Horstmann

În ediția din 1997 a Conceptelor de calcul cu C ++ Essentials , Cay S. Horstmann folosește o variantă a stilului Allman cu prima afirmație a fiecărui bloc plasată pe aceeași linie ca paranteză de deschidere.

 while ( x == y )
{ ceva ();
    somethingelse ();
    // ...
    dacă ( x < 0 )
    { printf ( „Negativ” );
        negativ ( x );
    }
    altceva
    { printf ( „Non-negativ” );
        non-negativ ( x );
    }
}
finalthing ();

Acest stil combină avantajele stilului Allman cu salvarea unui rând pe bloc. Ediția din 2003 a cărții a trecut însă la utilizarea stilului Allman. [2]

Stil Pico

Stil utilizat în principal în Pico de către designerii săi:

 chestii (n):
{x: 3 * n;
  y: doStuff (x);
  y + x}

Împărtășește multe aspecte ale stilului K&R, iar printre avantaje, plasarea parantezelor de deschidere și închidere este mai consistentă.

Stilul banner

Stilul banner plasează parantezele de închidere pe o nouă linie, la același nivel de liniuță cu blocul pe care îl încadrează.

 function1 () {
  face chestii
  face mai multe lucruri
  }

function2 () {
  etc.
  }

În HTML:

 < tabel >
  < tr >
    < td > multe lucruri ...
      mai multe lucruri
      </ td >
    < td > alternativă pentru liniile scurte </ td >
    < td > etc. </ td >
    </ tr >
  </ table >

< tabel >
  < tr > ... etc.
  </ tabel >

Stil Lisp

În stilul Lisp, parantezele de închidere sunt toate atașate la sfârșitul liniei ultimei instrucțiuni care le precedă. Acest lucru elimină majoritatea liniilor de paranteze (care în limbi precum Lisp ar fi altfel foarte abundente), dar face din indentare singura modalitate de a distinge vizual blocurile imbricate.

 ;; În Lisp
 ( dotimes ( i 10 )
   ( dacă ( evenp i )
       ( face-ceva i )
       ( face-altceva i )))
 // În C
 pentru ( i = 0 ; i < 10 ; i ++ ) {
     if ( i % 2 == 0 ) {
         doSomething ( i ); }
     altceva {
         doSomethingElse ( i ); } }
# În Python
 pentru i în intervalul ( 10 ):
     dacă i % 2 == 0 :
         face_ceva ( i )
     altceva :
         face_ceva_else ( i )

Stil Ratliff

C. Wayne Ratliff propune în cartea sa Programmers at Work [21] un stil similar cu 1TBS, dar cu paranteză de închidere la același nivel de indentare ca și blocul de închidere. Ratliff a fost programatorul care a lucrat la implementarea originală a dBase-II și dBase-III și indică stilul documentat inițial în ghidurile de linie Digital Research Inc.

 // În C
 pentru ( i = 0 ; i < 10 ; i ++ ) {
     if ( i % 2 == 0 ) {
         doSomething ( i );
         }
     altceva {
         doSomethingElse ( i );
         }
     }

Stil de lizibilitate a controlului compact

Acest stil plasează else pe o linie diferită de acoleta de închidere care o precedă, cu parantezele de deschidere pe aceeași linie cu declarația la care se referă.

 // În JavaScript
if ( x == y ) {
    doSomethingA ();
    doSomethingB ();
}
altceva {
    doSomethingC ();
    doSomethingD ();
}

Notă

  1. ^ "Tabs versus Spaces: An Eternal Holy War". de Jamie Zawinski 2000
  2. ^ "Standarde de codare WordPress"
  3. ^ Stack Overflow Developer Survey 2015 , pe stackoverflow.com , Stack Overflow.
  4. ^ Indentare , pe stilul de codare a kernel-ului Linux , kernel.org .
    „Acum, unii oameni vor susține că având indentări de 8 caractere, codul se deplasează prea mult spre dreapta și face dificilă citirea pe un ecran de terminal de 80 de caractere. Răspunsul la asta este că, dacă aveți nevoie de mai mult de 3 niveluri de indentare, oricum sunteți înșelat și ar trebui să vă remediați programul. " .
  5. ^ Linda Lamb, Învățarea editorului vi . O'Reilly
  6. ^ https://www.gnu.org/software/emacs/manual/html_node/emacs/Indent-Convenience.html
  7. ^ [1]
  8. ^ The Jargon File , la catb.org . Adus la 18 august 2014 .
  9. ^ J. Lions, Unix Operating System Code Source Level Six ( PDF ), v6.cuzuco.com , University of New South Wales, iunie 1977.
  10. ^ Achut Reddy, Java Coding Style Guide ( PDF ), pe developer.sun.com , Sun Microsystems, 30 martie 2000. Accesat la 30 mai 2008 (arhivat din original la 28 februarie 2006) .
  11. ^ Java Code Conventions ( PDF ), la java.sun.com , Sun Microsystems, 12 septembrie 1997. Accesat la 30 mai 2008 (arhivat din original la 13 mai 2008) .
  12. ^ Convenții de cod pentru limbajul de programare Java , la java.sun.com , Sun Microsystems, 20 martie 1997. Accesat la 30 mai 2008 .
  13. ^ a b Bjarne Stroustrup, PPP Style Guide ( PDF ), pe stroustrup.com , septembrie 2010.
  14. ^ a b Bill Shannon, C Style and Coding Standards for SunOS ( PDF ), Versiunea 1.8 din 96/08/19., Sun Microsystems, Inc., 1996. Accesat la 6 februarie 2015 .
  15. ^ Brendan Gregg,Ghid de stil DTraceToolkit , al brendangregg.com , Brendan D. Gregg. Adus la 6 februarie 2015 .
  16. ^ Bill Shannon, cstyle 1.58 98/09/09 , la https://www.illumos.org/projects/illumos-gate , Sun Microsystems, Inc .. Accesat la 6 februarie 2015 .
  17. ^ Jargon File 4.4.8: stil de indentare , la catb.org . Adus la 31 martie 2014 .
  18. ^ a b Formatarea codului dvs. sursă , pe standardele de codare GNU .
  19. ^ Experiențele mele Lisp și dezvoltarea GNU Emacs (Transcrierea discursului lui Richard Stallman, 28 octombrie 2002, la Conferința internațională Lisp) , pe gnu.org .
  20. ^ Steve McConnell , Code Complete: A practice handbook of software construction , Redmond, WA, Microsoft Press, 2004, pp. 746 -747, ISBN 0-7356-1967-0 .
  21. ^ Susan Lammers,Programmers at Work , Microsoft Press, 1986, ISBN 0-914845-71-3 .

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT