ооо, слушай, а мне тут есть что интересного рассказать..
такая казалось бы мелкая фича как экранирование $, неожиданно может иметь под капотом много проблем:
1) вот например хваленый интероп с джавой тут может легко поломаться, если сделать экранирование такое же как в обычных литералах котлина, через backaslash, то как такую строчку в джаве написать-то вообще?
\$ воспринимается как невалидный escape char
2) мне пришлось в интерполяции для джавы пользоваться тем же самым workarond-ом: ${‘$’}{….}
потому что java даже не строит AST дерево для файла в котором такие неожиданности как невалидный backslash
1.1) Интероп не ломается. Либо ты что-то особенное понимаешь под этим словом.
Строки это самые обычные java.lang.String, которым без разницы как ты их записал (в виде $ в виде \u024 или ещё как)
Интероп это не когда ты код в блокноте из одного языка в другой вставляешь. А это когда можно методы вызывать, классы наследовать и передавать Java объекты без постоянной конвертации типов.
Если ты делаешь «поддержку string interpolation в Java», то к interop это не имеет отношения.
1.2) Проблемы с $ начинаются тогда, когда какая-нибудь библиотека решит по-своему использовать смысл этого символа. Например, есть JavaPoet для генерации Java кода.
И они, такие, в API сделали методы вида
.beginControlFlow("for (int i = $L; i < $L; i++)", from, to)
или даже именованные параметры:
Map<String, Object> map = new LinkedHashMap<>();
map.put("food", "tacos");
map.put("count", 3);
CodeBlock.builder().addNamed("I ate $count:L $food:L", map)
Разумеется, попытка вызвать это из Kotlin карается тем, что $ нужно экранировать. Ладно ещё в однострочных литералах достаточно \ поставить и визуально ещё читается. Но вот в многострочных получается вообще атас, и вся читабельность из-за ${‘$’} пропадает.
Они как бы сделали «лучшее API, которое было возможно в Java», а добавить альтернативный символ вместо $ не хотят.
2) В JavaScript (
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/template_strings ) есть tagged string literals:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templatesС точки зрения пользователя, конечно, забавно. С точки зрения разработчика IDE — тот ещё ад. Как сделают в Kotlin остаётся лишь гадать.