Расскажу сегодня немного о фишке, которую многие и так знают: тройные кавычки. Внутри таких кавычек, мы можем писать текст на нескольких строках без необходимости использования символов экранирования. Например:
А если не будем использовать тройные кавычки и просто сделаем с пробелами, то будет так:
В целом результат похож, но нужно писать больше текста, соединять его, использовать \n.
Примеры, где это особенно полезно
- Создание запроса к базе данных (только помним про параметризованные запросы):
Смотрите как удобно читать сам запрос. Ну просто красота.
- Пример с JSON:
- Можем включать специальные символы (обратный слэш) без экранирования:
- Цитаты:
Например, в обычных строках нам пришлось бы экранировать символ кавычки с помощью обратного слэша (\):
Как работают тройные кавычки под капотом
Когда компилятор встречает строку в тройных кавычках, он обрабатывает ее как обычную строку, но без экранирования. В результате такой строки становится объект типа String, который сохраняет все пробелы и переносы строк, как они указаны в исходном коде.
Однако важно помнить, что символы переноса строки (\n) и пробелы тоже остаются частью строки. Например:
Как удалить отступы
Для удаления ненужных отступов можно использовать метод trimMargin. По умолчанию он ориентируется на разделитель |:
Но можем указать свой разделитель. Например, ??:
Преимущества
- Тройные кавычки делают код более читаемым и удобным для работы.
- Пробелы и переносы строк сохраняются, что упрощает работу с форматированными данными.
Ограничения
- Все пробелы и переносы строк сохраняются, что может приводить к неожиданным результатам, если их не учесть.
- Необходимо дополнительно обрабатывать отступы, чтобы избежать лишних пробелов в строке.
Есть несколько исключений, когда экранирование все-таки необходимо:
- Тройные кавычки внутри тройных кавычек: если нужно включить три кавычки внутри строки, то используем экранирование, помещая всё внутрь ${""}:
- Экранирование символов управления: если нам нужно включить табуляцию (\t) или новую строку (\n), то экранируем по шаблону выше:
Дубль статей в телеграмме — https://t.me/android_junior
Мои заметки в телеграмме — https://t.me/android_junior_notes