Информация об изменениях

Сообщение Re[3]: String templates (JEP 430) от 02.08.2023 17:12

Изменено 02.08.2023 17:14 vsb

Re[3]: String templates (JEP 430)
Здравствуйте, ·, Вы писали:

vsb>>·>Вот такие макросы. Простые до безобразия, но, имхо, довольно мощные, покрывают довольно много сценариев.

vsb>>Не хватает опциональных спецификаторов для форматирования.
·>Ты не понял, наверное. Внутри \{} находится обычное java-выражение, т.е. произвольный код и у выражения есть java-тип.

Я всё понял, я читал этот JEP.

.> В отличие от всяких шарпов — типы сохраняются, а не "всё — строки".


Сохраняется тип значения, а не тип выражения.

vsb>>Если взять тот же пример с SQL, то в JDBC в общем случае требуется указывать тип аргумента.

·>Не надо. Есть же тип у выражения.
·>
·>int age = 18;
·>String name = "vasya";
·>db."insert...\{age} \{name}"
·>

·>Тебе внутрь шаблона придёт List.of(18, "vasya") для каждого элемена можно сделать instanceof и соответсвующие маппинги типов.

А теперь то же самое для случая, когда name == null.

vsb>>Т.е. правильный код должен выглядеть примерно так:

·>Нет, или я не понял что именно ты имеешь в виду, что делать с этим VARCHAR2?

Передавать его в PreparedStatement.setObject.

vsb>>Также они были бы полезны для обычного форматирования строк: fmt"n=\{n:02x}" вместо format("n=%02x", n).

·>Это уже реализовали в стандартном FMT, погляди как на страничке jep. Просто наоборот записывается: FMT."n=%02x\{n}".

Ну как я и написал — парсить строку самому. Если это, к примеру, SQL, то сразу будет куча нюансов, чтобы не было совпадения синтаксиса с чем-нибудь. Не идеально.
Re[3]: String templates (JEP 430)
Здравствуйте, ·, Вы писали:

vsb>>·>Вот такие макросы. Простые до безобразия, но, имхо, довольно мощные, покрывают довольно много сценариев.

vsb>>Не хватает опциональных спецификаторов для форматирования.
·>Ты не понял, наверное. Внутри \{} находится обычное java-выражение, т.е. произвольный код и у выражения есть java-тип.

Я всё понял, я читал этот JEP.

.> В отличие от всяких шарпов — типы сохраняются, а не "всё — строки".


Сохраняется тип значения, а не тип выражения.

vsb>>Если взять тот же пример с SQL, то в JDBC в общем случае требуется указывать тип аргумента.

·>Не надо. Есть же тип у выражения.
·>
·>int age = 18;
·>String name = "vasya";
·>db."insert...\{age} \{name}"
·>

·>Тебе внутрь шаблона придёт List.of(18, "vasya") для каждого элемена можно сделать instanceof и соответсвующие маппинги типов.

А теперь то же самое для случая, когда name == null.

vsb>>Т.е. правильный код должен выглядеть примерно так:

·>Нет, или я не понял что именно ты имеешь в виду, что делать с этим VARCHAR2?

Передавать его в PreparedStatement.setObject.

vsb>>Также они были бы полезны для обычного форматирования строк: fmt"n=\{n:02x}" вместо format("n=%02x", n).

·>Это уже реализовали в стандартном FMT, погляди как на страничке jep. Просто наоборот записывается: FMT."n=%02x\{n}".

Ну как я и написал — парсить строку самому. Если это, к примеру, SQL, то сразу будет куча нюансов, чтобы не было совпадения синтаксиса с чем-нибудь. Не идеально. Опять же две функции — STR и FMT вместо одной универсальной.