De două ori pe lună, revizuim câteva postări favorite ale cititorilor noștri de-a lungul istoriei Nettuts+.
Codul de citire este un subiect universal în lumea programării pe calculator. Este unul dintre primele lucruri pe care le învățăm ca dezvoltatori. Acest articol va detalia cele mai bune cincisprezece practici cele mai importante atunci când scrieți un cod lizibil.
IDE (Mediul Integrat de Dezvoltare) au parcurs un drum lung în ultimii ani. Acest lucru a făcut comentarea codului dvs. mai util ca niciodată. Urmând anumite standarde din comentariile dvs., IDE și alte instrumente le pot utiliza în moduri diferite.
Luați în considerare acest exemplu:
Comentariile pe care le-am adăugat la definiția funcției pot fi previzualizate ori de câte ori folosesc acea funcție, chiar și din alte fișiere.
Iată un alt exemplu în care numesc o funcție dintr-o bibliotecă terță parte:
În aceste exemple particulare, tipul de comentariu (sau documentație) folosit se bazează pe PHPDoc, iar IDE este Aptana.
Presupun că știți deja că ar trebui să vă indentați codul. Cu toate acestea, merită menționat, de asemenea, că este o idee bună să păstrați coerența stilului dvs. de indentare.
Există mai multe moduri de codificare.
funcția foo () if ($ poate) do_it_now (); din nou(); altceva abort_mission (); finalize ();
funcția foo () if ($ poate) do_it_now (); din nou(); altceva abort_mission (); finalize ();
funcția foo () if ($ poate) do_it_now (); din nou(); altceva abort_mission (); finalize ();
Am obișnuit să cod în stil # 2, dar recent am trecut la # 1. Dar aceasta este doar o chestiune de preferință. Nu există niciun stil "cel mai bun" pe care toți ar trebui să îl urmeze. De fapt, cel mai bun stil, este un stil consistent. Dacă sunteți parte dintr-o echipă sau dacă contribuiți la un proiect, ar trebui să urmați stilul existent care este utilizat în acel proiect.
Stilurile de indentare nu sunt întotdeauna complet distincte una de cealaltă. Uneori, se amestecă reguli diferite. De exemplu, în standardele de codare PEAR, brațul de deschidere ""
merge pe aceeași linie cu structurile de control, dar se îndreaptă spre linia următoare după definițiile funcțiilor.
PEAR Stil:
funcția foo () // plasată pe următoarea linie dacă ($ poate) // plasată pe aceeași linie do_it_now (); din nou(); altceva abort_mission (); finalize ();
De asemenea, rețineți că utilizează patru spații în loc de file pentru denivelări.
Aici este un articol Wikipedia cu mostre de stiluri diferite indent.
Comentând codul dvs. este fantastic; totuși, poate fi suprasolicitată sau pur și simplu redundantă. Luați acest exemplu:
// primiți codul țării $ country_code = get_country_code ($ _ SERVER ['REMOTE_ADDR']); // dacă codul țării este SUA dacă ($ country_code == 'US') // afișează formularul de intrare pentru echo de stat form_input_state ();
Când textul este atât de evident, nu este deloc productiv să îl repet în cadrul comentariilor.
Dacă trebuie să comentezi acest cod, poți să-l combini pur și simplu cu o singură linie:
// afișați selecția de stat pentru utilizatorii din SUA $ country_code = get_country_code ($ _ SERVER ['REMOTE_ADDR']); dacă ($ country_code == 'US') echo form_input_state ();
De cele mai multe ori, anumite sarcini necesită câteva linii de cod. Este o idee bună să păstrați aceste sarcini în blocuri separate de cod, cu unele spații între ele.
Iată un exemplu simplificat:
// obține lista de forumuri $ forums = array (); $ r = mysql_query ("SELECT id, nume, descriere din forumuri"); în timp ce ($ d = mysql_fetch_assoc ($ r)) $ forums [] = $ d; // încărcați șabloanele load_template ('header'); load_template ( 'forum_list', $ forumuri); load_template ( 'footer');
Adăugarea unui comentariu la începutul fiecărui bloc de cod evidențiază de asemenea separarea vizuală.
PHP însăși este uneori vinovată de faptul că nu urmărește schemele de numire consecvente:
Mai întâi de toate, numele trebuie să aibă limite de cuvânt. Există două opțiuni populare:
Având opțiuni diferite, se creează o situație similară stilurilor indentate, așa cum am menționat anterior. Dacă un proiect existent urmează o anumită convenție, ar trebui să mergeți cu asta. De asemenea, unele platforme lingvistice tind să utilizeze o anumită schemă de denumire. De exemplu, în Java, majoritatea codurilor folosesc numele camelCase, în timp ce în PHP, majoritatea utilizărilor subliniază.
Acestea pot fi, de asemenea, amestecate. Unii dezvoltatori preferă să utilizeze subliniere pentru funcții procedurale și nume de clase, dar folosesc camelCase pentru numele metodelor de clasă:
clasa Foo_Bar funcția publică someDummyMethod () funcțional procedural_function_name ()
Deci, din nou, nu există un stil evident "cel mai bun". Doar constanta.
DRY înseamnă "Nu te repeta". De asemenea, cunoscut sub numele de DIE: Duplicarea este rău.
Principiul prevede:
"Fiecare element al cunoașterii trebuie să aibă o reprezentare unică, lipsită de ambiguitate și autoritate într-un sistem".
Scopul pentru majoritatea aplicațiilor (sau a calculatoarelor în general) este de a automatiza sarcinile repetate. Acest principiu ar trebui menținut în toate codurile, chiar și în aplicațiile web. Aceeași bucată de cod nu trebuie repetată niciodată.
De exemplu, majoritatea aplicațiilor web constau din mai multe pagini. Este foarte probabil ca aceste pagini să conțină elemente comune. Anteturile și subsolurile sunt de obicei cele mai bune candidaturi pentru acest lucru. Nu este o idee bună să păstrați copiile lipirea acestor anteturi și subsoluri în fiecare pagină. Aici este Jeffrey Way explicând cum să creați șabloane în CodeIgniter.
$ This-> a sarcinii> vizualizare ( 'include / header'); $ This-> a sarcinii> vizualizare ($ main_content); $ This-> a sarcinii> vedere ( 'include / subsol');
Prea multe niveluri de cuibărire pot face ca codul să fie mai greu de citit și de urmat.
funcția do_stuff () //? dacă is_writable ($ folder)) if ($ fp = fopen ($ file_path, 'w')) if ($ stuff = get_some_stuff ()) if (fwrite ($ fp, $ stuff) altfel return false; altfel return false; altfel return false; altfel return false;
Din motive de lizibilitate, este posibilă, de obicei, modificarea codului pentru a reduce nivelul de cuibărire:
funcția do_stuff () //? dacă (! is_writable ($ folder)) return false; dacă ! $ fp = fopen ($ file_path, 'w')) return false; dacă (! $ stuff = get_some_stuff ()) return false; dacă (fwrite ($ fp, $ stuff)) //? altfel return false;
Ochii noștri sunt mai confortabili atunci când citesc coloane înalte și înguste de text. Acesta este motivul pentru care articolele din ziare arată astfel:
Este o bună practică să evitați scrierea liniilor orizontale lungi de cod.
/ / set_from ('[email protected] ') -> add_to ('[email protected]') -> set_subject (' trimite(); // set_from ('[email protected]') -> add_to ('[email protected] ') -> set_subject (' Metode reinițiate ') -> set_body trimite(); // bad $ query = "SELECT id, nume utilizator, first_name, last_name, status FROM users LEFT JOIN utilizator_posts USING (users.id, user_posts.user_id) WHERE post_id = '123'"; // good $ query = "SELECT id, nume de utilizator, first_name, last_name, status FROM users LEFT JOIN user_posts USING (users.id, user_posts.user_id) WHERE post_id = '123'";
De asemenea, dacă cineva intenționează să citească codul dintr-o fereastră terminală, cum ar fi utilizatorii Vim, este o idee bună să limitați lungimea liniei la aproximativ 80 de caractere.
Din punct de vedere tehnic, ați putea scrie un întreg cod de aplicație într-un singur fișier. Dar asta s-ar dovedi a fi un coșmar pentru a citi și a menține.
În timpul primelor mele proiecte de programare, știam despre ideea de a crea "include fișiere". Cu toate acestea, nu am fost încă organizat de la distanță. Am creat un director "inc", cu două fișiere în el: db.php
și functions.php
. Pe măsură ce aplicațiile au crescut, fișierul de funcții a devenit, de asemenea, uriaș și imposibil de întreținut.
Una dintre cele mai bune abordări este fie să folosiți un cadru, fie să imități structura folderului. Iată cum arată CodeIgniter:
În mod normal, variabilele trebuie să fie descriptive și să conțină unul sau mai multe cuvinte. Dar, acest lucru nu se aplică neapărat variabilelor temporare. Ele pot fi la fel de scurte ca un singur caracter.
Este o bună practică să folosiți nume coerente pentru variabilele temporare care au același rol. Iată câteva exemple pe care le folosesc în codul meu:
// $ i pentru contoarele de buclă pentru ($ i = 0; $ i < 100; $i++) // $j for the nested loop counters for ($j = 0; $j < 100; $j++) // $ret for return variables function foo() $ret['bar'] = get_bar(); $ret['stuff'] = get_stuff(); return $ret; // $k and $v in foreach foreach ($some_array as $k => $ v) // $ q, $ r și $ d pentru mysql $ q = "SELECT * FROM table"; $ r = mysql_query ($ q); în timp ce ($ d = mysql_fetch_assocr ($ r)) // $ fp pentru indicatorii de fișiere $ fp = fopen ('file.txt', 'w');
Interacțiunea bazei de date este o mare parte din majoritatea aplicațiilor web. Dacă scrieți interogări SQL necorespunzătoare, este o idee bună să le păstrați ușor de citit.
Chiar dacă cuvintele și denumirile speciale ale cuvintelor SQL nu sunt sensibile la litere mari, este o practică obișnuită să le capitalizăm pentru a le distinge de numele tabelei și coloanelor.
SELECT id, username FROM user; UPDATE utilizator SET last_login = ACUM () WHERE id = '123' SELECT id, username FROM utilizator u LEFT JOIN user_address ua ON (u.id = ua.user_id) WHERE ua.state = 'NY' GROUP BY u.id ORDER BY u.username LIMIT 0,20
Acesta este un alt principiu care se aplică aproape tuturor limbajelor de programare în toate mediile. În cazul dezvoltării web, "date" implică de obicei ieșirea HTML.
Când PHP a fost lansat pentru mulți ani în urmă, a fost văzut în primul rând ca un motor de șablon. A fost obișnuit să aveți fișiere HTML mari cu câteva linii de cod PHP între ele. Cu toate acestea, lucrurile s-au schimbat de-a lungul anilor, iar site-urile au devenit tot mai dinamice și mai funcționale. Codul este acum o parte imensă a aplicațiilor web și nu mai este o practică bună combinarea acesteia cu codul HTML.
Puteți aplica singură principiul aplicației dvs. sau puteți utiliza un instrument terț (motoare șablon, cadre sau CMS-uri) și urmați convențiile.
PHP Framework-uri populare:
Motoare populare pentru șabloane:
Sisteme de management al conținutului populare
Puteți alege să nu utilizați un motor șablon fantezist și, în schimb, să mergeți cu PHP in-line în fișierele șablonului. Acest lucru nu încalcă neapărat "Separarea codului și a datelor", atâta timp cât codul inline este direct legat de ieșire și poate fi citit. În acest caz, ar trebui să luați în considerare utilizarea sintaxei alternative pentru structurile de control.
Iată un exemplu:
Salut, nume de utilizator; ?>
|Mesajul meu
titlu; ?>
Forumuri ca $ forum):?>id, $ forum-> titlu)?> (Threads-> count (); ?> fire)
Descriere; ?>
Acest lucru vă permite să evitați o mulțime de bretele curbate. De asemenea, codul arată și se simte similar cu modul în care este structurat și indentat codul HTML.
Programarea orientată obiect vă poate ajuta să creați un cod bine structurat. Dar asta nu înseamnă că trebuie să renunți complet la programarea procedurală. De fapt, crearea unui amestec de ambele stiluri poate fi bună.
Obiectele ar trebui să fie utilizate pentru reprezentarea datelor, care de obicei locuiesc într-o bază de date.
user clasa public $ username; public $ first_name; public $ last_name; public $ email; funcția publică __construct () //? funcția publică create () //? funcția publică salvați () //? funcția publică șterge () //?
Funcțiile funcționale pot fi utilizate pentru sarcini specifice care pot fi efectuate independent.
funcția capitalizează ($ string) $ ret = strtoupper ($ string [0]); $ ret = strtolower (substr ($ șir, 1)); retur;
Proiectele Open Source sunt construite cu ajutorul mai multor dezvoltatori. Aceste proiecte trebuie să mențină un nivel ridicat de citire a codului, astfel încât echipa să poată lucra împreună cât mai eficient posibil. Prin urmare, este o idee bună să navigați prin codul sursă al acestor proiecte pentru a observa ce fac acești dezvoltatori.
Când faceți "refactor", modificați codul fără a modifica funcționalitatea acestuia. Vă puteți gândi la ea ca la o "curățare", pentru a îmbunătăți lizibilitatea și calitatea.
Acest lucru nu include remedierile de eroare sau adăugarea oricărei noi funcționalități. S-ar putea să refaceți codul pe care l-ați scris cu o zi înainte, în timp ce este încă în stare proaspătă în cap, pentru a fi mai ușor de citit și reutilizabil atunci când este posibil să îl priviți la două luni de acum. După cum spune motto-ul: "Reactor devreme, refactor de multe ori."
Puteți aplica oricare dintre "cele mai bune practici" de citire a codului în timpul procesului de refactorizare.
Sper că vă place acest articol! Orice am pierdut? Anunță-mă prin comentariile. Și dacă doriți să vă îmbunătățiți codarea, există multe scripturi și aplicații disponibile pentru a vă ajuta pe Envato Market. Vedeți ce este cel mai popular în această săptămână.