Новое предложение по усовершенствованию JDK (JEP) делает волну в сообществе Java: JEP 286. В предложении предлагается ввести вывод типа локальной переменной в будущих версиях Java, чтобы упростить написание приложений Java.
В следующем посте мы объясним, что это значит и как это повлияет на ваш код.
Вар Предложение
Новая функция языка предлагает добавить немного синтаксического сахара в Java — упростить его и улучшить опыт разработчика. Новый синтаксис сократит церемонию, связанную с написанием Java, сохраняя при этом приверженность безопасности статических типов.
Другими словами, вы сможете объявлять переменные без указания связанного типа. Oracle заявил, что эта новая функция позволит, например, такие объявления, как:
1
2
|
var list = new ArrayList<String>(); val stream = getStream(); |
Это заменит текущий синтаксис:
1
2
|
List<String> list = new ArrayList<String>(); final Stream<String> stream = getStream(); |
Как видите, вывод типа локальной переменной позволит использовать ключевое слово var вместо указания типа переменной.
Известно, что Java немного многословна, и это хорошо, когда речь идет о чтении и понимании того, что вы или другой разработчик имели в виду при написании функции. Для тех из вас, кто всегда думал, что это немного утомительно, предложение знаменует собой значительные изменения.
Это предложение не относится к Java 9, который уже находится в стадии разработки и также изменит ваш код .
JEP или не JEP?
Несколько недель назад Брайан Гетц, архитектор языка Java в Oracle, опубликовал результаты опроса для этого нового предложения. Основной вопрос был: «Что вы думаете о предложенной функции вывода локальных переменных в целом?». Ответили 2453 разработчика, и результат у нас в основном положительный:
Вторая часть опроса была посвящена будущему синтаксису, предлагая 5 вариантов выбора на основе аналогичного использования в других языках, таких как C #, Scala, Swift, C ++ или использование let. Большинство пользователей выбрали вариант var / val:
Несмотря на то, что большинство пользователей одобряют эту новую опцию, читая в разделе комментариев, разработчики, которые одобряют это изменение, просят Oracle «идти в ногу со временем», указывая на то, что это изменение должно применяться только к val, и даже запрашивая дополнительные изменения, в виде многострочных строк.
Разработчики, выступающие против этого предложения, утверждают, что это может быть затруднительно для тех, кто делает первые шаги в Java, или указывают, что существующий синтаксис представляет собой «правильное сочетание многословия и разборчивости» и что «оператор diamond был хорошим двигаться », в отличие от текущего предложения.
Откуда это изменение?
Одна из самых распространенных претензий к Java — это количество стандартного кода, необходимого для его написания. Несколько строк Java-кода могут быть написаны одной строкой на других языках, таких как C ++, C #, Scala и Go.
В то время как Type Inference не является новой концепцией в Java, это новая концепция для локальных переменных.
Он был частично представлен в Java 7 (как часть Project Coin) с оператором diamond (<>), который позволяет инициализировать списки без привязки к типу ArrayList <>, а также в Java 8 с Lambda Formals. Например, использование оператора diamond позволило написать следующий код:
1
|
List<String> list = new LinkedList<String>(); |
И, конечно же, на сводной странице JEP 286 вы сможете найти следующее обоснование от Oracle для добавления новой функции:
«Java — едва ли не единственный популярный язык со статической типизацией, который не включает вывод типа локальной переменной; на данный момент, это больше не должна быть противоречивой функцией»
Как это повлияет на ваш код?
Oracle знает, что сообществу может потребоваться время, чтобы приспособиться и принять это новое предложение. Хотя до сих пор неясно, станет ли JEP 286 реальностью в будущих версиях Java, этого достаточно, чтобы несколько разработчиков в сообществе высказались.
Если вы один из тех разработчиков, вы были бы рады узнать, что это лечение ограничено:
- Локальные переменные с инициализаторами
- Индексы в расширенном цикле for
- Местные жители объявлены в традиционном цикле
Oracle заявляет, что он не будет доступен для:
- Параметры метода
- Параметры конструктора
- Методы возврата типов
- поля
- Поймать формальные (или любой другой вид объявления переменных)
Из-за приверженности Java поддерживать предыдущие версии Java, мы можем предположить, что это не нарушит обратную совместимость.
Попробуйте это дома
Мы в Takipi всегда любим пробовать что-то новое до того, как они появятся на рынке, и JEP 286 — именно это. Если вы не сформировали мнение о JEP 286, вы можете проверить это прямо сейчас.
В рамках программы Adopt OpenJDK Ричард Уорбертон и Рауль-Габриэль Урма публично опубликовали неофициальные сборки Open JDK с поддержкой JEP 286 . Таким образом, вы сможете поэкспериментировать с новыми функциями, узнать, что такое JEP 286, и почувствовать его вкус в действии.
Последние мысли
Это новое предложение вызывает волнение в сообществе Java, привлекает много внимания. Тот факт, что вы можете протестировать новую функцию прямо сейчас, поможет разработчикам осознать, что может ожидать будущее Java.
Важно помнить, что это раннее предложение, и до сих пор не ясно, будет ли Oracle реализовывать его. Вот почему мы рекомендуем вам участвовать в будущих опросах и быть активным участником этого JEP и других будущих функций, связанных с Java.
Ссылка: | Результаты опроса сообщества Java: 74% разработчиков хотят меньше многословия от нашего партнера по JCG Айриса Шура в блоге Takipi . |