Здравствуйте, vsb, Вы писали:
.>> В отличие от всяких шарпов — типы сохраняются, а не "всё — строки".
vsb>Сохраняется тип значения, а не тип выражения.
Эээ.. ну да. Но тип значения даже точнее. Или что ты имеешь в виду?
vsb>>>Если взять тот же пример с SQL, то в JDBC в общем случае требуется указывать тип аргумента.
vsb>·>Не надо. Есть же тип у выражения.
vsb>·>vsb>·>int age = 18;
vsb>·>String name = "vasya";
vsb>·>db."insert...\{age} \{name}"
vsb>·>
vsb>·>Тебе внутрь шаблона придёт List.of(18, "vasya") для каждого элемена можно сделать instanceof и соответсвующие маппинги типов.
vsb>А теперь то же самое для случая, когда name == null.
А, понял. А setObject разве не сработает с java.sql.Types.NULL?
Но суть даже не в этом. Всё равно я не вижу нужды в каком-то новом особом магическом синтаксисе
\{name:VARCHAR2}. У нас же там java код и можно оборачивать как обычный код. Если тебе не нравится
\{arg(name, VARCHAR2)} можно запилить например
\{DB.VARCHAR2(name)}. Может буковок и чуть больше, но ведь это обычный java-код, который будет обычным образом авто-комплититься, рефакториться, навигироваться, етс.
vsb>>>Т.е. правильный код должен выглядеть примерно так:
vsb>·>Нет, или я не понял что именно ты имеешь в виду, что делать с этим VARCHAR2?
vsb>Передавать его в PreparedStatement.setObject.
Тут ведь как — это будет всё равно гораздо лучше, чем есть на сегодняшний день.
vsb>>>Также они были бы полезны для обычного форматирования строк: fmt"n=\{n:02x}" вместо format("n=%02x", n).
vsb>·>Это уже реализовали в стандартном FMT, погляди как на страничке jep. Просто наоборот записывается: FMT."n=%02x\{n}".
vsb>Ну как я и написал — парсить строку самому. Если это, к примеру, SQL, то сразу будет куча нюансов, чтобы не было совпадения синтаксиса с чем-нибудь. Не идеально.
А кто по-твоему должен парсить магию "\{name:VARCHAR2}"? Зато вот
\{DB.VARCHAR2(name)} — парсит компилятор — как обычный ява-код.
vsb> Опять же две функции — STR и FMT вместо одной универсальной.
Так ведь у них разные предназначения. STR это замена "aa" + n + "bb", а FMT это форматтер со своим синтаксисом. print vs printf