Re[4]: String templates (JEP 430)
От: · Великобритания  
Дата: 02.08.23 18:38
Оценка:
Здравствуйте, 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
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.