Сообщение String templates (JEP 430) от 02.08.2023 13:47
Изменено 02.08.2023 13:51 ·
String templates (JEP 430)
В java выкатывают так называемые строчные шаблоны. Возможность внедрять выражения внутрь строки и интерполировать.
Идея примерно такая:
tpl."Hello, \{name}! Today is \{LocalDate.now()}."
компилятором преобразуется примерно вот в такое
tpl.process(List.of("Hello, ", "! Today is ", "."), List.of(name, LocalDate.now()))
Собственно всё. Т.е. строчка разделяется на текстовые фрагменты и захваченные значения. Дальше дело техники — можно определять свои шаблоны и любую хитрую обработку фрагментов и значений. В качестве примера приводится SQL (полный код тут):
Тут кастомный процессор DB создаёт из строки объект типа PreparedStatement с "?" тексте запроса и подставляет соответствующие параметры.
Вот такие макросы.
Идея примерно такая:
tpl."Hello, \{name}! Today is \{LocalDate.now()}."
компилятором преобразуется примерно вот в такое
tpl.process(List.of("Hello, ", "! Today is ", "."), List.of(name, LocalDate.now()))
Собственно всё. Т.е. строчка разделяется на текстовые фрагменты и захваченные значения. Дальше дело техники — можно определять свои шаблоны и любую хитрую обработку фрагментов и значений. В качестве примера приводится SQL (полный код тут):
PreparedStatement ps = DB."SELECT * FROM Person p WHERE p.last_name = \{name}";
ResultSet rs = ps.executeQuery();
Тут кастомный процессор DB создаёт из строки объект типа PreparedStatement с "?" тексте запроса и подставляет соответствующие параметры.
Вот такие макросы.
String templates (JEP 430)
В java выкатывают так называемые строчные шаблоны. Возможность внедрять выражения внутрь строки и интерполировать.
Идея примерно такая:
tpl."Hello, \{name}! Today is \{LocalDate.now()}."
компилятором преобразуется примерно вот в такое
tpl.process(List.of("Hello, ", "! Today is ", "."), List.of(name, LocalDate.now()))
Собственно всё. Т.е. строчка разделяется на текстовые фрагменты и захваченные значения. Дальше дело техники — можно определять свои шаблоны и любую хитрую обработку фрагментов и значений. В качестве примера приводится SQL (полный код тут):
Тут кастомный процессор DB создаёт из строки объект типа PreparedStatement с "?" тексте запроса и подставляет соответствующие параметры.
Вот такие макросы. Простые до безобразия, но, имхо, довольно мощные, покрывают довольно много сценариев.
Идея примерно такая:
tpl."Hello, \{name}! Today is \{LocalDate.now()}."
компилятором преобразуется примерно вот в такое
tpl.process(List.of("Hello, ", "! Today is ", "."), List.of(name, LocalDate.now()))
Собственно всё. Т.е. строчка разделяется на текстовые фрагменты и захваченные значения. Дальше дело техники — можно определять свои шаблоны и любую хитрую обработку фрагментов и значений. В качестве примера приводится SQL (полный код тут):
PreparedStatement ps = DB."SELECT * FROM Person p WHERE p.last_name = \{name}";
ResultSet rs = ps.executeQuery();
Тут кастомный процессор DB создаёт из строки объект типа PreparedStatement с "?" тексте запроса и подставляет соответствующие параметры.
Вот такие макросы. Простые до безобразия, но, имхо, довольно мощные, покрывают довольно много сценариев.