Как стать автором
Обновить

В Java 13 хотят добавить «текстовые блоки»

Время на прочтение2 мин
Количество просмотров9.7K
Автор оригинала: Jim Laskey
Блоки текста запланированы к появлению в Java 13. Об этом стало известно из JEP 355.

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

Это дальнейшая попытка исследований, начавшихся в JEP 326(необработанные строковые литералы, был отозван).



Цели JEP 355


  • Упрощение написания Java кода избегая escape-последовательностей.
  • Повышение читаемости кода.

То, чего JEP 355 точно не пытается достичь


  • Это не попытка определить новый ссылочный тип, как java.lang.String.
  • Это не попытка переопределить строковой оператор "+".
  • Блоки текста не поддерживают интерполяцию строк. Эта возможность может быть добавлена в последующих JEP'ах.


Мотивация


В Java для встраивания объектов XML, HTML, JSON и т.п. обычно требуется значительное редактирование с экранированием и конкатенацией строк. Фрагмент часто трудно читать и трудно поддерживать.

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

Синтаксис и описание


Блоки строк обрамляются """ и """ справа и слева. Содержание блока начинается с первого символа после """ и заканчивается на последнем символе перед """. Тройные кавычки выбраны для того чтобы было понятно, что это строки текста, но чтобы можно было отличить их от обычного строкового литерала("...").

Блоки могут содержать символы кавычек(") напрямую, без слэша(\). Можно использовать и \", но это не рекомендуется делать.

Перенос строк делается автоматически. Использование \n разрешено, но не рекомендуется.

"""
line 1
line 2
line 3
"""

аналогично

"line 1\nline 2\nline 3\n"

или

"line 1\n" +
"line 2\n" +
"line 3\n"

Вот пример пустого блока текста:

String empty = """
""";

Вот плохая практика использования блоков текста:

String a = """""";   
String b = """ """;
String c = """
           ";
String d = """        
           abc \ def
           """;  

Escape-последовательности в блоках текста


Escape-последовательности интерпретируются. Это означает, что разработчики могут писать escape-последовательности, например, \n внутри блоков.

Примеры


HTML


String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

Старый способ
String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";


SQL


String query = """
               SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
               WHERE `CITY` = 'INDIANAPOLIS'
               ORDER BY `EMP_ID`, `LAST_NAME`;
               """;

Старый способ
String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
               "WHERE `CITY` = 'INDIANAPOLIS'\n" +
               "ORDER BY `EMP_ID`, `LAST_NAME`;\n";


Скрипт


ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("""
                         function hello() {
                             print('"Hello, world"');
                         }
                         
                         hello();
                         """);

Старый способ
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("function hello() {\n" +
                         "    print('\"Hello, world\"');\n" +
                         "}\n" +
                         "\n" +
                         "hello();\n");

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Нравится ли вам эта фича?
75.81% Да304
3.99% Нет16
7.98% Мне все равно32
2% Да, но я не буду использовать ее8
10.22% Я не пишу на Java41
Проголосовал 401 пользователь. Воздержались 27 пользователей.
Теги:
Хабы:
+12
Комментарии29

Публикации

Изменить настройки темы

Истории

Работа

Java разработчик
352 вакансии

Ближайшие события