Най-накрая можете да декларирате локални променливи Inferred Type в Java с var - ето защо това е страхотно

Здравейте всички! В тази статия ще обсъдя новите функции на Java 10. По-конкретно, ще говоря за може би най-популярното и най-полезното: въвеждането на ключовата дума var в Java. Е, това всъщност не е ключова дума - но ще ви разкажа по-късно.

Най-накрая…

И накрая, Java получи ключовата дума var, за да декларира локални променливи. Това ви позволява да декларирате променлива без нейния тип. Например, вместо да правите това:

String str = “Java”

сега можете просто да кажете това:

var str = “Java”.

Това може да не звучи като много печалба, когато декларирате String или int променлива, но помислете например за сложни типове с генерични продукти. Това със сигурност ще спести много писане и ще подобри четливостта на кода.

Малко предистория

Разработчиците на Java отдавна се оплакват от шаблонния код и церемониите, свързани с писането на код. Много неща, които отнемат само 5 минути на езици като Python, Groovy или JavaScript, могат да отнемат повече от 30 минути в Java поради своята многословност.

Ако сте кодирали в Scala, Kotlin, Go, C # или който и да е друг език на JVM, тогава знаете, че всички те имат някакъв вид извод за локален тип променлива, който вече е вграден в езика.

Например JavaScript има let и var , Scala и Kotlin имат var и val , C ++ има auto , C # има var и Go поддържа това чрез декларация с оператора : = .

До Java 10 Java беше единственият език, който нямаше извод за локална променлива или поддръжка за ключовата дума var.

Въпреки че изводът за типа беше значително подобрен в Java 8 с въвеждането на ламбда израза, препратките към методите и потоците, локалните променливи все още трябваше да бъдат декларирани с подходящ тип. Но това вече го няма! Java 10 има функция, JEP 286: Локална променлива тип извод , която ще позволи деклариране на локални променливи без информация за типа и само с помощта на ключовата дума var.

Нека да разгледаме отблизо.

Примери за ключови думи за Java 10 var

Ето някои примери за ключова дума за Java 10:

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

Както казах, на този етап може да не разберете напълно това, което var прави за вас. Но вижте следващия пример:

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

Тук списъкът ще бъде изведен в Списък t; .. >>, който е тип пресичане, но няма да се налага да въвеждате пълната информация за типа. var прави кода много по-лесен за писане и четене в този случай.

В следващия раздел ще видим още няколко примера, които ще ви помогнат да научите как да пишете кратък код с помощта на var в Java 10.

Писане на кратък код с помощта на ключовата дума var в Java

Използването на var резервната дума също прави вашия код кратък, като намалява дублирането - например името на Класа, което идва както от дясната, така и от лявата страна на заданията, както е показано в следващия пример:

ByteArrayOutputStream bos = new ByteArrayOutputStream();

Тук ByteArrayOutputStream се повтаря два пъти и можем да премахнем това, като използваме функцията var на Java 10, както е показано по-долу:

var bos = new ByteArrayOutputStream();

Можем да правим подобни неща, докато използваме инструкции try-with-resource в Java, например това

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

може да се напише както следва:

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

Това са само няколко примера. Има много места, където можете да използвате var, за да направите кода си по-сбит и четим, много от които можете да видите в курса на Sander's Pluarlsight Какво ново в Java 10 .

Това е платен курс, но можете да проверите този 10-дневен безплатен пробен период.

Original text


За тези програмисти, които са използвали Groovy или Scala, въвеждането на var изглежда, че Java върви по пътя на Scala ... но само времето ще покаже.

Засега можем просто да се радваме, че var улеснява декларирането на сложна локална променлива в Java 10.

И забележете: изводът за типа на локалната променлива на ключовата дума Java 10 var може да се използва само за деклариране на локални променливи (например всяка променлива в тялото на метода или кодовия блок).

Можете ли да използвате var за деклариране на променливи на членове в Java?

Не можете да използвате var за деклариране на променливи на членове в класа, формални параметри на метода или връщане на тип методи.

Например, този пример за var е добре:

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

Но следният пример НЕ Е ОК:

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

Така че, въпреки че тази нова функция на Java 10 привлича вниманието и изглежда добре, все още има дълъг път. И все пак можете да започнете да го използвате, за да опростите допълнително кода си. По-малко шаблонният код винаги означава по-добър и по-четим код.

Важни моменти за тази нова ключова дума var

След като вече знаете, че можете да декларирате локални променливи, без да декларирате типа в Java 10, е време да научите няколко важни неща за тази функция, преди да започнете да я използвате в производствения си код:

1. Тази функция е изградена под JEP 286: Локален променлив тип извод и е създадена от не друг, а от Брайън Гьоц. Той е автор на Java Concurrency in Practice, една от най-популярните книги за разработчици на Java.

2. Ключовата дума var позволява извод за тип локална променлива, което означава, че типът за локалната променлива ще бъде изведен от компилатора. Сега не е нужно да го декларирате.

3. Локалното извеждане на типа променлива или ключовата дума Java 10 var може да се използва само за деклариране на локални променливи , например вътрешни методи, на кодов блок на инициализатори, индекси в усъвършенствания цикъл for, ламбда изрази и локални променливи, декларирани в традиционен цикъл for .

Не можете да го използвате за деклариране на формални променливи и връщане на типове методи, за деклариране на променливи или полета на член, на формални променливи на конструктора и всякакъв друг вид декларация на променлива.

4. Въпреки въвеждането на var, Java все още е статично типизиран език и трябва да има достатъчно информация, за да се направи извод за типа на локалната променлива. Ако не, компилаторът ще изведе грешка.

5. Ключовата дума var е подобна на ключовата дума auto на C ++, var на C #, JavaScript, Scala, Kotlin, def на Groovy и Python (до известна степен) и оператора: = на езика за програмиране Go.

6. Едно важно нещо, което трябва да знаете е, че въпреки че var изглежда като ключова дума, това всъщност не е ключова дума. Вместо това е запазено име на тип. Това означава, че кодът, който използва var като променлива, метод или име на пакет, няма да бъде засегнат.

7. Друго нещо, което трябва да се отбележи, е, че кодът, който използва var като име на клас или интерфейс, ще бъде засегнат от тази промяна в Java 10. Но както казва JEP, тези имена са рядко срещани на практика, тъй като нарушават обичайните конвенции за именуване.

8. Неизменният еквивалент на локални променливи или крайни променливи val и let все още не се поддържа в Java 10.

Обобщавайки

Това е всичко за var в Java 10! Това е интересна функция на Java 10, която ви позволява да декларирате локални променливи, без да декларирате техния тип. Това също ще помогне на разработчиците на Java да вземат бързо други езици, като Python, Scala или Kotlin, тъй като те силно използват var за деклариране на променливи променливи и val за деклариране на неизменяеми локални променливи.

Въпреки че JEP 286: Локално променлива тип извод поддържа само var, но не и val , тя все още е полезна и се чувства по-скоро като кодиране на Scala в Java.

По-нататъшно обучение

Какво е новото в Java 10 от Sander Mak

Указания за стил за локално променливо извеждане на тип в Java

JEP 286: Локална променлива тип извод

10 неща Разработчикът на Java трябва да се научи през 2018 г.

Пълният Java MasterClass, за да научите Java по-добре

Благодаря, че прочетохте тази статия. Ако харесвате тази нова функция на Java 10, моля, споделете с приятелите и колегите си.

Ако имате въпроси или отзиви, моля, пуснете бележка и следете за още уроци и статии за Java 10 тук.

Първоначално публикувано на javarevisited.blogspot.com на 27 март 2018 г.