Java в 2019 и после: обзор языка

0
4520
views
Java в 2019

Какие ассоциации возникают у программистов, когда они слышат слово Java? Некоторые вспоминают многословный язык программирования, который учили в университете. Другие, вероятно, слышали о Java из-за популярности этого языка. А некоторые… просто ненавидят Java.

И все-таки, сегодня Java остается в лидерах языков программирования. Попробуем разобраться, в чем причина такого положения.

Java, которую вы знаете

Многие специалисты учили Java, когда только приступали к программированию. Некоторые влюбились в этот язык, а другие стали его ненавидеть. К сожалению, люди судят о нынешнем состоянии Java по тому, что они учили много лет назад.

Венкат Субраманиан (Venkat Subramanian) сказал дословно следующее: «Программирование на Java стала намного приятнее в последние 5 лет по сравнению с тем, что было 20 лет назад, и я собираюсь инвестировать в нее. Java в ближайшие 3 или 4 года будет развиваться быстрее, чем когда бы то ни было.»

Мне хотелось бы показать все ситуации, в которых Java стала лучше, но это произошло в таком количестве случаев, что у меня просто не получится этого сделать.

Мне хотелось бы показать все ситуации, в которых Java стала лучше, но это произошло в таком количестве случаев, что у меня просто не получится этого сделать. И все-таки, давайте рассмотрим несколько примеров. Для начала воспользуемся старой Java, которую вы, вероятно, знаете. Затем посмотрим, как можно было бы решить ту же задачу, используя современную Java.

Скажем, преподаватель попросил вас написать программу, которая создает список целых чисел от 1 до 10, а затем идет по этому списку и печатает все четные числа. В старой Java код мог бы выглядеть так:

ArrayList<Integer> myList = new ArrayList<Integer>();


  for (int i = 1; i <= 10; i++) {

      myList.add(i);

  }


  for (int num : myList) {

      if (num % 2 == 0)

	  System.out.println(num);

  }

Те, кто знаком с другими языками, наверняка захотят упростить это решение. В современной Java, этот код станет понятнее, если записать его в следующем стиле:

rangeClosed(1, 10).boxed().collect(Collectors.toList())

      .stream()

      .filter(integer -> integer % 2 == 0)

      .forEach(System.out::println);

Кажется, это выглядит намного лучше.

Java известна как язык, в котором придется описать каждую отдельную деталь, прежде чем получиться сделать простейшее действия. так что для Java, которую вы знаете, создание хэш-таблицы будет выглядеть, например, так:

  HashMap<Integer, String> myMap = new HashMap<Integer, String>();

Да, хотелось бы, чтобы это было лаконичнее. К счастью, теперь Java не требует в коде такой рутины:

  var myMap = new HashMap<Integer, String>();

Я совсем не хочу убедить вас в том, что Java — самый понятный язык, но я хочу показать вам, что Java, похоже, стала лаконичнее и понятнее с тех пор, когда вы имели с ней дело в последний раз.

Современная Java

Рассмотрим некоторые моменты, которые стали лучше в Java. Обратите внимание, что этот список ни в коей мере не претендует на полноту. Легко вспомнить много других улучшений, кроме тех, которые будут здесь упомянуты. Чтобы рассмотреть все улучшения, пришлось бы написать об этом отдельную книгу.

JShell

Интерпретатор Java JShell предназначен для изучения языка и прототипирования кода.

JShell предоставляет цикл «ввод-вычисление-вывод», или REPL-цикл (Read-Evaluate-Print-Loop), который создает переменные по определению, выполняет действия и вычисляет выражения по мере их ввода, при этом результаты показываются сразу же. Этот интерпретатор запускается из командной строки:

Этот интерпретатор запускается из командной строки

С помощью сеанса JShell можно протестировать отдельные действия, попробовать разные варианты метода и поэкспериментировать с непривычными API.

Этот инструмент добавлен в JDK 9, и он крайне полезен. Я бы назвал его палочкой-выручалочкой наших дней.

Выражения выбора (Switch-выражения)

Ожидается, что выражения выбора будут включены в JDK 12+, они упрощают хорошо известные нам действия выбора switch. Например, код

switch (day) {

  case MONDAY:

  case FRIDAY:

  case SUNDAY:

      System.out.println(6);

      break;

  case TUESDAY:

      System.out.println(7);

      break;

  case THURSDAY:

  case SATURDAY:

      System.out.println(8);

      break;

  case WEDNESDAY:

      System.out.println(9);

      break;

  }

можно было бы записать так:

switch (day) {

    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);

    case TUESDAY                -> System.out.println(7);

    case THURSDAY, SATURDAY     -> System.out.println(8);

    case WEDNESDAY              -> System.out.println(9);

}

Завершение-в-будущем (“Обещания” Java)

Завершение-в-будущем (CompletableFuture) предназначено для создания и выполнения цепочку асинхронных задач.

Завершение-в-будущем работает точно так же, как это делают обещания в JavaScript (JavaScript Promises).

  public static void main(String[] args) throws InterruptedException {

      CompletableFuture.supplyAsync(() -> longProcess()).thenAccept(System.out::println);

      Thread.sleep(4000);

      System.out.println("Done!");

  }


  private static int longProcess() {

      try {

	  Thread.sleep(2000);

      } catch (InterruptedException e) {

	  e.printStackTrace();

      }

      return 1;

  }

Завершение-в-будущем ввели уже в JDK 8, и несмотря на это народ заворожили побрякушки новых потоков Java, которые затмили такой прекрасный инструмент.

Тем, кто заинтригован, предлагаю ознакомиться с завершением-в-будущем с помощью этого видеоурока:

Ткацкий станок (Project Loom)

«Ткацкий станок» пока что дорабатывается и предоставляет «волокна», как легкие эффективные «нити», управляемые виртуальной машиной Java. С помощью волокон разработчики используют уже известные простые абстракции, но с более высокой производительностью и меньшими издержками.

Волокна намного легче, чем нити ядра в плане издержек по памяти, при этом стоимость переключения между ними почти равна нулю.

В одном экземпляре JVM можно создать миллионы волокон, и при этом программиста не будут смущать проблемы синхронных блокирующих вызовов, так как блокировка будет выполняться практически даром.

Записи (Классы данных Java)

Записи, которые также еще только предстоит реализовать, задуманы, чтобы облегчить создание «старых добрых Java-объектов» (POJO, Plain-Old-Java-Object). Например, класс вроде

 class Point {

      double x;

      double y;

    

      Point(double x, double y) {

	  this.x = x;

	  this.y = y;

      }

    

      public void setX(double x) {

	  this.x = x;

      }

    

      public double getX() {

	  return x;

      }

    

      public void setY(double y) {

	  this.y = y;

      }

    

      public double getY() {

	  return y;

      }

    

      @Override

      public int hashCode() {

	  return super.hashCode();

      }

    

      @Override

      public boolean equals(Object obj) {

	  return super.equals(obj);

      }


    

      @Override

      public String toString() {

	  return super.toString();

      }

  }

записывается просто как

record Point(double x, double y);

Рассмотрение остальных особенностей Java я хотел бы оставить, как пищу для вашего любопытства.

Цикл выпуска

Недавно было объявлено, что для Java будет использоваться шестимесячный цикл выпуска, так что теперь очередной выпуск будет происходить каждые 6 месяцев. Это прекрасная новость, так как теперь мы будем получать новые возможности быстрее.

Java на Android

Java на Android

Google объявила Kotlin официальным языком, и с тех пор его возможности невероятно возросли.

Конечно же, я люблю Kotlin, и я использую его. Но, мне кажется, этот язык не станет полноценной заменой Java.

В наше время некоторые разработчики для Android жалуются на недостатки Java. В таких случаях я прошу их конкретизировать свои. На самом деле, эти разработчики жалуются на многословность Java 7, но на момент написания этой статьи уже выпущена Java 12. Kotlin выглядит круто на Android отчасти и потому, что разработчики для Android не осваивают новые возможности Java, и застревают на использовании Java 7 ~ Java 8.

Как бы то ни было, но большинство приложений для Android до сих пор все еще написаны на Java. Вероятно, большинство профессиональных разработчиков прекрасно уживаются с Java 7. 🙂

Предлагаю не допускать ошибки, сравнивая Kotlin и Java точно так же, как мы сравнивали Swift с Objective C.

К сожалению, множество разработчиков для Android даже не имеют представления о том, как далеко Java продвинулась, как язык, потому что они до сих пор используют Java, которую они учили в университете.

Кстати, я разрабатываю для Android, и тоже думаю, что Kotlin крут 😉

Java все еще свободна

Недавно Oracle объявила, что собирается брать плату за коммерческое использование и долговременную поддержку Oracle JDK. Конечно же, это попало в заголовки, и было написано множество статей, неверных в отношении фактов.

Тем, кого это может взволновать, я сообщаю: Java все еще свободна.

Это изменение не так уж и заметно затронет большинство больших компаний, которые используют для разработки Oracle JDK.

Для тех, кто все еще беспокоится, повторюсь: для этого нет причин!

В отношении JDK 11 можно сказать, что OpenJDK имеет все те же самые возможности, что и Oracle JDK. Следовательно, их без проблем можно заменять один на другой.

Более того, недавно Amazon анонсировала Amazon Corretto — бесплатный мультиплатформенный дистрибутив Open Java Development Kit (OpenJDK), который полностью пригоден для промышленного использования.

Для Corretto предоставляется долговременная поддержка, которая включает улучшение производительности и исправление ошибок безопасности.

Вы также можете обратиться к другим поставщикам OpenJDK, например, AdoptOpenJDK, так что, на самом деле для тревоги нет причин.

Java остается свободной.

Рейтинг Java как языка

Сейчас Java занимает первое место в рейтинге языков программирования TIOBE. Она также была на втором месте в рейтинге Github’s /State of the Octoverse/.

Это не рекламный трюк

Эта статья не предназначена для того, чтобы заставить вас бросить все и начать изучать Java. Я всего лишь хотел рассказать вам, как далеко ушла Java, и где она лидирует, как язык.

Способность Java приспосабливаться к различным требованиям помогла ей оставаться одним из ведущих языков на протяжении очень долгого времени.


ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here