Re[7]: String templates (JEP 430)
От: Jack128  
Дата: 03.08.23 06:35
Оценка: 1 (1) +1
Здравствуйте, ·, Вы писали:

·>Здравствуйте, Jack128, Вы писали:


J>> Строка — это просто вариант по умолчанию. В общем случае ты можешь написать свой InterpolatedStringHandler и заиметь полный того, что в заглавном посте для джавы было написано.

J>>
J>> DbDataReader reader = DB.ExecuteToReader($"SELECT * FROM Person p WHERE p.last_name = {name}"); // будет сгенерён sql c параметром
J>>

·>Да, похоже. Но как-то страшно выглядит... Магические атрибуты какие-то и куча магии в компиляторе. С другой стороны, наверное проще для оптимизатора кода.

Магия этого атрибута — ничто по сравнению с DllImportAttribute, но как то живём.

А так, да, там и производительность больше (сможет джава убрать вызовы List.of если они не нужны? например Logger.TRACE."Залогинился \{userName}", а логируем мы только ошибки )
Еще в хенлере используется обычная перегрузка, поэтому мы можем ограничить множество типов, допустимых в плейсхолерах. Например в SqlInterpolatedStringHandler можно пускать только числовые типы, строку, дату и byte[] , а на остальные типы компилятор будет ругаться.

Поэтому да, возможностей больше, общая спецификация сложнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.