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

Сообщение Re[2]: String templates (JEP 430) от 02.08.2023 16:57

Изменено 02.08.2023 17:01 ·

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

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

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

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

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

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

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

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

vsb>Этого, к сожалению, нет. Конечно можно вынести их за фигурную скобку и парсить строку, но это уже не совсем то... Лучшее, что можно придумать это обёртку:

Это если тебе надо типы java->sql преобразовывать только для каждого аргумента по-разному.

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

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

vsb>Не понял, правда, при чём тут макросы.

Ну обычно во всяких немерлях такое делали макросами которое, конечно, навороченнее, но гораздо сложнее. А тут всё просто.
Re[2]: String templates (JEP 430)
Здравствуйте, vsb, Вы писали:

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

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

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

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

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

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

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

vsb>Этого, к сожалению, нет. Конечно можно вынести их за фигурную скобку и парсить строку, но это уже не совсем то... Лучшее, что можно придумать это обёртку:

Это если тебе надо типы java->sql преобразовывать только для каждого аргумента по-разному.

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

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

vsb>Не понял, правда, при чём тут макросы.

Ну обычно во всяких немерлях такое делали макросами которое, конечно, навороченнее, но гораздо сложнее. А тут всё просто.