Самые интересные и незамедлительные новые функции

Новая Java уже здесь!

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

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

Мне нравится идея гибкой разработки на Java и получения небольших релизов с несколькими новыми функциями и доработками каждые шесть месяцев. Это снова делает язык интересным и захватывающим и доказывает, что вам не нужны революционные изменения (например, потоки и лямбда-выражения в Java 8) только для оправдания выпуска. Не менее хорошо и большое количество мелких улучшений.

Давайте посмотрим на новые функции и улучшения Java 13, такие как новые способы использования выражений переключения и функцию текстовых блоков, которая изначально была предназначена для Java 12.

Усовершенствования Switch Expression

Выражения переключения были представлены в Java 12 в качестве предварительной версии. За последние несколько месяцев сообщество отправило отзывы в Oracle, и теперь в Java 13 они выпустили некоторые улучшения, о которых просили программисты.

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

Switch всегда был подвержен ошибкам и обычно редко использовался в повседневной разработке. Необходимость набирать break; в конце каждого случая всегда казалась шаблонной. Java 12 решила эту проблему, выполнив две вещи: она сделала switch выражение (а не просто оператор), что означает, что теперь он возвращает значение, которое может быть присвоено переменной, или служить оператором возврата, или любым другим вариантом использования, который вы может подумать. Второе, что сделала Java 12, - это избавилась от раздражающего break;, сделав switch не провалом между случаями, когда вы используете новый синтаксис case -> вместо case:.

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

// Legacy Switch Statement
private String javaReleaseDate(int version) {
  String result = "TBD";
  switch (version){
    case 12:
      result = "19.3";
      break;
    case 13:
      result = "19.9";
      break;
  };

  return result;
}

// Arrow Syntax Switch Expression // no fall-through
private String javaReleaseDate(int version) {
  return switch (version) {
    case 12 -> "19.3";
    case 13 -> "19.9";
    default -> "TBD";
  };
}

Из-за отзывов сообщества о выражениях переключателя в Java 13, если вы хотите использовать switch как выражение, а не инструкцию, и хотите использовать синтаксис двоеточия, ключевое слово break заменяется ключевым словом yield. Это изменение устраняет путаницу и делает очевидным, используете ли вы switch как выражение или как утверждение, что снижает вероятность непреднамеренного использования того, что вам не нужно. Оператор yield очень похож на оператор return ; при совпадении case он возвращает текущий результат ветвления без провала.

// Switch Expression using yield over break
private  String javaReleaseDate(int version) {
  return switch (version){
    case 12: yield "19.3";
    case 13: yield "19.3";
    default: yield "TBD";
  };
}

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

Текстовые блоки

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

Текстовые блоки позволяют лучше писать и, что более важно, читать многострочный текст внутри кода Java. Этого требовалось в Java, особенно потому, что другие языки, работающие на виртуальных машинах Java, такие как Kotlin и Scala, уже довольно давно поддерживают многострочный текст.

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

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

// Multi line text with regular String
String html = "<html>\n" +
            "   <title>\n" +
            "     Text Blocks\n" +
            "   </title>\n" +
            "   <body>\n" +
            "     <p>...</p>\n" +
            "   </body>\n" +
            "</html>\n";

// With Text Blocks  
String html = """
              <html>
                <title>
                  <p>Text Blocks</p>
                </title>
                <body>
                  <p>...</p>
                </body>
              </html>""";

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

Обратите внимание, что текстовые блоки нельзя использовать в одной строке: открывающие кавычки должны сопровождаться символом конца строки, иначе код не будет компилироваться.

В Java 13 есть еще много изменений. Если вы посмотрите официальный журнал изменений, вы увидите довольно большой список новых функций, но также устаревших и устаревших компонентов.

Для разработчиков два, которые мы только что рассмотрели, являются наиболее интересными, и их можно использовать немедленно. Просто имейте в виду, что обе функции находятся в состоянии предварительной версии и могут развиваться в выпусках функций.