Сообщение 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 в общем случае требуется указывать тип аргумента.
·>Не надо. Есть же тип у выражения.
·>
·>Тебе внутрь шаблона придёт 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, то сразу будет куча нюансов, чтобы не было совпадения синтаксиса с чем-нибудь. Не идеально.
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 в общем случае требуется указывать тип аргумента.
·>Не надо. Есть же тип у выражения.
·>
·>Тебе внутрь шаблона придёт 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 вместо одной универсальной.
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 вместо одной универсальной.