Du kan endelig erklære afledte type lokale variabler i Java med var - her er hvorfor det er fantastisk

Hej allesammen! I denne artikel vil jeg diskutere nye funktioner i Java 10. Specifikt vil jeg tale om sandsynligvis det mest populære og mest nyttige: introduktionen af ​​var-nøgleordet i Java. Nå, det er ikke rigtig et nøgleord - men jeg fortæller dig om det senere.

Endelig…

Endelig har Java fået var- nøgleordet til at erklære lokale variabler. Dette giver dig mulighed for at erklære en variabel uden dens type. For eksempel i stedet for at gøre dette:

String str = “Java”

du kan nu bare sige dette:

var str = “Java”.

Dette lyder måske ikke meget at vinde, når du erklærer en streng eller en int-variabel, men tænk f.eks. På komplekse typer med generiske stoffer. Dette vil helt sikkert spare en masse indtastning og vil også forbedre læsbarheden af ​​koden.

En lille baggrund

Java-udviklere har længe klaget over kogepladekode og de involverede ceremonier, mens de skriver kode. Mange ting, der kun tager 5 minutter på sprog som Python, Groovy eller JavaScript, kan tage mere end 30 minutter i Java på grund af dets bredde.

Hvis du har kodet i Scala, Kotlin, Go, C # eller ethvert andet JVM-sprog, ved du, at de alle har en slags lokal variabel type inferens, der allerede er indbygget i sproget.

For eksempel har JavaScript ladet og var , Scala og Kotlin har var og val , C ++ har auto , C # har var, og Go understøtter dette ved erklæring med : = operatoren.

Indtil Java 10 var Java det eneste sprog, der ikke havde lokal variabel type inferens eller understøttelse af var nøgleordet.

Selvom typeinferens blev forbedret meget i Java 8 med introduktionen af ​​lambda-ekspressionen, metodereferencer og streams, var det stadig nødvendigt at deklarere lokale variabler med den rette type. Men det er nu væk! Java 10 har en funktion, JEP 286: Lokal variabel type inferens , som gør det muligt at deklarere lokale variabler uden typeoplysninger og ved blot at bruge var-nøgleordet.

Lad os se nærmere på.

Java 10 var søgeordseksempler

Her er nogle eksempler på Java 10's var-nøgleord:

var str = "Java 10"; // infers String 
var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream

Som jeg sagde, på dette tidspunkt kan du måske ikke helt værdsætte, hvad var gør for dig. Men se på det næste eksempel:

var list = List.of(1, 2.0, "3")

Her vil listen blive udledt til liste t; .. >> som er en krydsetype, men du behøver ikke at indtaste oplysningerne om den fulde type. var gør koden meget lettere at skrive og læse i dette tilfælde.

I næste afsnit ser vi nogle flere eksempler, der hjælper dig med at lære, hvordan du skriver kortfattet kode ved hjælp af var i Java 10.

Skrivning af kortfattet kode ved hjælp af var-nøgleordet i Java

Brugen af ​​var reserveordet gør også din kode kortfattet ved at reducere duplikering - for eksempel navnet på klassen, der kommer på både højre og venstre side af opgaver som vist i følgende eksempel:

ByteArrayOutputStream bos = new ByteArrayOutputStream();

Her gentages ByteArrayOutputStream to gange, og vi kan eliminere det ved at bruge var-funktionen i Java 10 som vist nedenfor:

var bos = new ByteArrayOutputStream();

Vi kan gøre lignende ting, mens vi bruger prøve-med-ressource udsagn i Java, for eksempel dette

try (Stream data = dbconn.executeQuery(sql)) { return data.map(...) .filter(...) .findAny(); }

kan skrives som følger:

try (var books = dbconn.executeQuery(query)) { return books.map(...) .filter(...) .findAny(); }

Dette er blot nogle få eksempler. Der er mange steder, hvor du kan bruge var til at gøre din kode mere kortfattet og læsbar, hvoraf mange kan ses på Sanders Pluarlsight-kursus Hvad er nyt i Java 10 .

Det er et betalt kursus, men du kan tjekke denne 10-dages gratis prøveperiode.

For de programmører, der har brugt Groovy eller Scala, får introduktionen af ​​var det til at virke som Java går Scala-vejen ... men kun tiden vil vise det.

For nu kan vi bare være glade for, at var gør det lettere at erklære en kompleks lokal variabel i Java 10.

Og bemærk: den lokale variabeltypeslutning af nøgleordet Java 10 var kan kun bruges til at erklære lokale variabler (for eksempel enhver variabel inde i metodens brødtekst eller kodeblok).

Kan du bruge var til at erklære medlemsvariabler i Java?

Du kan ikke bruge var til at erklære medlemsvariabler inden for klassen, metodeformelle parametre eller returneringstype af metoder.

For eksempel er dette eksempel på var OK:

public void aMethod(){ var name = "Java 10"; } 

Men følgende eksempel er IKKE OK:

class aClass{ var list; // compile time error }

Så selvom denne nye Java 10-funktion er iøjnefaldende og ser godt ud, har den stadig lang vej at gå. Stadig kan du begynde at bruge den til yderligere at forenkle din kode. Mindre kedelpladekode betyder altid bedre og mere læselig kode.

Vigtige punkter om dette nye var nøgleord

Nu hvor du ved, at du kan erklære lokale variabler uden at erklære typen i Java 10, er det tid til at lære et par vigtige ting om denne funktion, før du begynder at bruge den i din produktionskode:

1. Denne funktion er bygget under JEP 286: Lokal variabel type inferens og blev skrevet af ingen ringere end Brian Goetz. Han er forfatter til Java Concurrency in Practice, en af ​​de mest populære bøger for Java-udviklere.

2. Nøgleordet var tillader slutning af lokal variabel, hvilket betyder, at typen for den lokale variabel udledes af kompilatoren. Nu behøver du ikke at erklære det.

3. Den lokale variabeltypeslutning eller Java 10 var-nøgleordet kan kun bruges til at erklære lokale variabler , for eksempel inde i metoder, på initialiseringskodeblok, indekser i forbedret for loop, lambda-udtryk og lokale variabler, der er erklæret i en traditionel for loop .

Du kan ikke bruge den til at erklære formelle variabler og returnere typer af metoder, til at deklarere medlemsvariabler eller felter, på konstruktørformelle variabler og enhver anden form for variabelerklæring.

4. På trods af introduktionen af ​​var er Java stadig et statisk skrevet sprog, og der skal være tilstrækkelig information til at udlede typen af ​​den lokale variabel. Hvis ikke, vil compileren kaste en fejl.

5. Var-nøgleordet svarer til det automatiske nøgleord for C ++, var af C #, JavaScript, Scala, Kotlin, def for Groovy og Python (til en vis grad), og operatøren: = af Go-programmeringssproget.

6. En vigtig ting at vide er, at selvom var ligner et nøgleord, er det ikke rigtig et nøgleord. I stedet er det et reserveret typenavn. Dette betyder, at kode, der bruger var som en variabel, metode eller pakkenavn, ikke påvirkes.

7. En anden ting at bemærke er, at kode, der bruger var som klasse- eller interface-navn, vil blive påvirket af denne Java 10-ændring. Men som JEP siger, er disse navne sjældne i praksis, da de overtræder sædvanlige navngivningskonventioner.

8. Den uforanderlige ækvivalent af lokale variabler eller endelige variabler val og let understøttes endnu ikke i Java 10.

Afslutter

Det handler om var i Java 10! Det er en interessant Java 10-funktion, som giver dig mulighed for at erklære lokale variabler uden at erklære deres type. Dette vil også hjælpe Java-udviklere med at hente andre sprog hurtigt, som Python, Scala eller Kotlin, fordi de stærkt bruger var til at erklære mutable variabler og val til at erklære uforanderlige lokale variabler.

Selvom JEP 286: Local-Variable Type Inference kun understøtter var og ikke val , er det stadig nyttigt og føles mere som at kode Scala i Java.

Videre læring

Hvad er nyt i Java 10 af Sander Mak

Retningslinjer for stil for lokal variabel typeinference i Java

JEP 286: Lokal variabel type inferens

10 ting Java Developer burde lære i 2018

Den komplette Java MasterClass for at lære Java bedre

Tak, fordi du læste denne artikel. Hvis du kan lide denne nye Java 10-funktion, så del den med dine venner og kolleger.

Hvis du har spørgsmål eller feedback, skal du slippe en note og holde øje med flere Java 10-selvstudier og artikler her.

Oprindeligt offentliggjort på javarevisited.blogspot.com den 27. marts 2018.