Статьи

Результаты опроса сообщества Java: 74% разработчиков хотят меньше многословия

Новое предложение по усовершенствованию 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 разработчика, и результат у нас в основном положительный:

Изображение-e1460556767492

Что вы думаете о предложенной функции вывода локальных переменных в целом?

Вторая часть опроса была посвящена будущему синтаксису, предлагая 5 вариантов выбора на основе аналогичного использования в других языках, таких как C #, Scala, Swift, C ++ или использование let. Большинство пользователей выбрали вариант var / val:

Изображение-1

Возможные варианты синтаксиса

Несмотря на то, что большинство пользователей одобряют эту новую опцию, читая в разделе комментариев, разработчики, которые одобряют это изменение, просят 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.