1. Zahar sintactic
Programatorilor le place când un cod complex sau o logică poate fi scris în câteva rânduri, făcând codul compact și ușor de citit. Iar creatorii limbajelor de programare ajută uneori cu asta.
O caracteristică de limbaj elegant care vă permite să utilizați o comandă rapidă (scrieți mai puțin cod) se numește zahăr sintactic . Dar, ca să fiu sincer, există foarte puțin în Java.
Creatorii lui Java au făcut tot ce le-a putut pentru a elimina orice redundanță în Java. Dacă C++ vă permite să faceți ceva în 20 de moduri, atunci Java vă permite să faceți acest lucru într-un singur fel.
Dar nici programatorilor Java, nici creatorilor Java nu le-a plăcut lipsa de libertate. Și, uneori, zahărul face viața mai ușoară pentru oamenii obișnuiți ca tine și mine.
Apropo, ați întâlnit deja niște zahăr sintactic: autoboxing și unboxing . Să comparăm:
Cod lung | Cod compact |
---|---|
|
|
|
|
|
|
În loc de codul lung ca în stânga, puteți scrie codul mai compact în dreapta. Și compilatorul Java inteligent va genera versiunea verbosă a codului pe baza versiunii scurte a codului. Acesta este exact ceea ce este zahărul sintactic.
2. Deducerea tipului unei variabile: var
cuvântul cheie
În Java 11, compilatorul a devenit și mai inteligent și poate determina acum tipul unei variabile declarate pe baza tipului valorii atribuite acesteia . În cod, arată astfel:
var name = value;
Unde name
este numele unei noi variabile, valoarea este valoarea sa inițială și var
este un cuvânt cheie folosit pentru a declara variabila. Tipul variabilei nume va fi același cu tipul valorii atribuite acesteia.
Exemple:
Cum vedem codul | Ce vede compilatorul |
---|---|
|
|
|
|
|
|
|
|
|
|
Compilatorul însuși determină sau deduce tipul variabilei pe baza valorii atribuite acesteia.
Programatorii au dezbătut aprins dacă să adauge o astfel de caracteristică limbajului. Mulți oameni se temeau că acest lucru var
va fi abuzat și că lizibilitatea codului va avea de suferit ca urmare.
Există un sâmbure de adevăr în acest lucru, așa că cel mai bine este să utilizați var
acolo unde crește lizibilitatea codului. De exemplu, acestea în două cazuri:
Cazul 1: Privind valoarea atribuită variabilei, tipul variabilei este imediat clar
Cod | Explicaţie |
---|---|
|
Variabila este anInputStream |
|
Variabila este aString |
În aceste cazuri, nu ar trebui să utilizați var
. Ei bine, care este tipul variabilei?
Cod | Explicaţie |
---|---|
|
Este dificil de determinat tipul variabilei |
|
Este dificil de determinat tipul variabilei |
Cazul 2: Tipul variabilei nu este important pentru înțelegerea codului
Codul de multe ori nu are nevoie să apeleze metode pe o variabilă, de exemplu atunci când o variabilă este pur și simplu folosită pentru a stoca temporar ceva. În acest caz, utilizarea var
cu siguranță nu reduce lizibilitatea codului:
Cod lung | Cod compact |
---|---|
|
Am primit metadate din stream flux și le-am salvat în storage depozit. Tipul data specific al variabilei nu este important. |
Mediul de aur
Acum voi oferi trei moduri de a scrie același cod. Utilizarea var
ar fi cea mai bună opțiune.
Cod | Notă |
---|---|
|
Prea compact |
|
Exact |
|
Prea detaliat |
Trecând de la versiunea cu 1 linie la versiunea pe 2 rânduri, am făcut codul puțin mai lizibil utilizând un nume de variabilă ( headerInfo
). Acum este clar că metoda returnează nu doar meta informații, ci și informații de antet.
Cea de-a treia versiune este prea prolixa. Faptul că headerInfo
este a FileMetaInfo
este deja destul de clar din getFileMetaInfo()
metodă. Scopul metainformațiilor este mult mai interesant.
3. Omiterea tipului cu operatorul diamant:<>
Chiar înainte de var
apariția operatorului, au existat încercări de a învăța compilatorul cum să deducă tipurile de colecții. Veți fi de acord că această notație pare puțin redundantă:
ArrayList<String> list = new ArrayList<String>();
Începând de la a șaptea versiune de Java, atunci când scrieți un tip de colecție, puteți omite tipul elementelor de colecție dacă a fost specificat la declararea unei variabile. Cu alte cuvinte, codul de mai sus poate fi scris într-o formă ușor prescurtată:
ArrayList<String> list = new ArrayList<>();
După cum puteți vedea, nu mai trebuie să scrieți String a doua oară. Nu la fel de cool ca cu operatorul var, dar părea un progres la momentul respectiv.
Parantezele unghiulare goale din tipul de colecție au fost numite operator de diamant , deoarece cele două paranteze unghiulare seamănă vag cu un diamant.
Nu este de dorit să folosiți var
cuvântul cheie și operatorul diamant în același timp :
var list = new ArrayList<>();
Nu există deloc informații despre tipul elementelor stocate în colecție, iar tipul de colecție va fi ArrayList < Object >.
4. Acolade duble
Vă amintiți inițializarea rapidă a matricei?
Am enumerat doar valorile în acolade, astfel:
Exemple |
---|
|
|
Creatorilor Java le-a plăcut ideea de a folosi acolade pentru a simplifica scrierea elementelor unei matrice. Dar cum rămâne cu colecțiile?
Creatorii lui Java au avut suficientă gândire creativă și pentru colecții, permițându-le să folosească un truc cu bretele duble.
Cu zahar | Fara zahar |
---|---|
|
|
Dacă compilatorul întâlnește cod ca în exemplul din stânga, atunci îl convertește în codul din dreapta.
Codul nu devine mult mai compact. Economiile aici sunt destul de nesemnificative: nu trebuie să scrii list
de fiecare dată. Acest lucru poate fi util dacă numele variabilei este foarte lung.
Dar dacă întâlniți astfel de cod într-un proiect, nu vă mirați 🙂
GO TO FULL VERSION