Урок 3: Строки в Kotlin. Интерполяция. Конкатенация

Урок 3: Строки в Kotlin. Интерполяция. Конкатенация

Здравствуйте. Обсудим возможности строк в Kotlin. Строки в программировании — это набор символов, объединённых в последовательность. Чтобы научиться использовать их эффективно, давайте разберём несколько примеров. Представим, что мы программируем бота, который будет приветствовать новых пользователей по имени и сообщать какую-нибудь информацию. Для этого распечатаем такую строку:

println("What is your main question?")

Конкатенация строк

Наша задача — добавить к исходной строке приветствие. Самое простое, что можно сделать со строками — это складывать их между собой, то есть выполнять конкатенацию строк. Складывать строки можно с помощью знака +.

Введем дополнительные переменные. Строку с приветствием и переменную, в которой будем хранить короткую строку – просто пробел. Так как пробел – это всего лишь один символ, сделаем переменную типа Char, проинициализировав ее значение в одинарных кавычках.

Соберем строку как конструктор, связывая элементы между собой знаками +. Вот так будет выглядеть сложение строковых литералов (литерал – простыми словами это значение, которое напрямую объявили в коде). То есть вот так будет выглядеть сложение нескольких строк (или конкатенация).

val greeting = "Hello"
val space = ' '
println(greeting + "!" + space + "What is your main question?")

Отлично, мы получили строку с приветствием.

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

val userName = "Star Lord"

Теперь внедрим обращение в сообщение. То, что мы сейчас изобразили – это один из работающих, но не совсем общепринятых способов – складывать литерал и переменную с помощью знака плюс.

println(greeting + ", " + userName + "!" + space + " + "What is your main question?")
Урок 3: Строки в Kotlin. Интерполяция. Конкатенация

Строковые шаблоны (интерполяция строк)

Смотрите, такое нагромождение кавычек и операторов сложения сложно читается и повышает риск совершить ошибку. И Kotlin позволяет изящно реализовать отображение значения переменной прямо в единой строке, используя строковые шаблоны (или шаблонные строки). По другому эта функция языка называется интерполяция строк.

Фокус в том, что мы пишем требуемый текст и вставляем переменную прямо в строку без дополнительных знаков сложения. А чтобы переменная userName не была просто текстом, а стала носителем и передатчиком значения, необходимо добавить знак $ перед переменной. Теперь она выделена цветом для дополнительной наглядности и кликабельна.

println("$greeting, $userName! What is your main question?")

При запуске программы интерпретатор увидит в строковом литерале переменную и подставит туда значение. Переменная space нам больше не нужна, ведь это грубо говоря теперь одна непрерывная строка с естественными пробелами. Такой шаблон строки можно создавать с любыми типами, в том числе с выражениями, с методами, логическими ветвлениями if else и так далее.

Строковый шаблон с выражением

Но, чтобы сделать строковый шаблон с неким выражением, там где просто переменной недостаточно, это выражение нужно поместить в фигурные скобки. И перед скобками точно также ставим знак $, чтобы это больше не было обычной строкой. Теперь при запуске метода вывода в консоль, выражение в фигурных скобках сначала выполнится, а затем на его месте в строке будет выведен результат.

println("To which you can respond ${40 + 2}")

Многострочное интерполирование

Еще одна из отличительных возможностей языка – удобная запись многострочного текста. За многострочный текст в Котлине отвечает оператор тройные кавычки. Объявим переменную и начнем инициализировать ее в виде многострочной строки в тройных кавычках.

Функция trimIndent()

Смотрите, среда разработки автоматически добавила вызов функции trimIndent() , применимую к нашей строке. Эта функция проводит дополнительную оптимизацию – обнаруживает общий минимальный отступ (слева) у всех строк и удаляет его из каждой строки.

Урок 3: Строки в Kotlin. Интерполяция. Конкатенация

Вот пример. Проинициализируем переменную такой многострочной записью. Добавим рандомные отступы слева. Выведем значение переменной в консоль.

val multiString = """
                    ewuriw
          rewrqwe
              jkj ;lk
""".trimIndent()

Как мы видим, из трех строк минимальный отступ слева оказался у второй – он и был вырезан во всех строках. Для явной демонстрации зачем нужна эта функция – удалим ее и перезапустим программу. Все оригинальные отступы сохранены.

Функция trimMargin()

Но можно отобразить вывод еще изящнее. Мы можем все строки с разными отступами приравнять к левому краю одинаково. Для этого надо изменить функцию для нашей строки на trimMargin() и добавить символы вертикальной черты в начале каждой строки. И получим ровный отформатированный текст.

Где это может применяться? Например, если мы хотим написать целую функцию, используя многострочное интерполирование. А, как правило, если логика выглядит чуть сложнее, чем обычный текст, следует писать ее с соблюдением отступов для ее функциональности, читабельности и вообще красоты.

val multiString = """
                    |ewuriw
          |rewrqwe
              |jkj ;lk
""".trimMargin()

Экранирование символов

Иногда нужно вставить специальные символы в строку, например, кавычки или символ новой строки (который, кстати, пишется, как \n). Для этого используется экранирование с помощью символа \.

Покажу на примере, как это работает. Допустим, наш бот печатает чью-то цитату или прямую речь. Например, «И он сказал – это великолепно!» Нам нужно запрограммировать переменную со строкой так, чтобы фраза «это великолепно» распечаталась с кавычками.

Если я произвольно проставлю кавычки в середине строки – все сломается, так как фактически для компилятора переменная со строкой закончится перед словом «это». Поэтому мы применяем обратный слэш для экранирования символов и строка успешно распечатывается.

val phrase = «And he said – \»it is magnificent!\»» println(phrase)

Бесплатные Telegram-боты для обучения

Практика с проверкой кода и помощью ИИ-ментора

AndroidSprint AI Mentor

Проверяет Pull Request'ы в GitHub, проводит тестовые собеседования с голосом и таймером, помогает разбираться с кодом 24/7

Попробовать ИИ-ментора →

KotlinSprint Bot

22 урока Kotlin, 220 тестов, 120 практических задач с код-ревью

Начать обучение Kotlin →

AndroidSprint Bot

Тесты по Android SDK, Jetpack Compose, архитектуре приложений

Тесты по Android →

Бесплатная диагностика с сениор разработчиком

Запишитесь на консультацию — перезвоним в рабочие часы

Или свяжитесь удобным способом

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Курс AndroidSprint - Глубокое <strong>обучение Android разработке с 0 до получения оффера</strong>. Только персональная практика с гарантией получения продуктового опыта.
Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Практикум по Kotlin - Изучение Котлин <strong>с 0 для профессиональной разработки</strong>. Личный ментор и разбор кода задач через git-flow.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Бесплатные уроки по Kotlin разработке - <span>Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.</span>
Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Onboarding в разработку - <span>Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь</span>
Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Обучающий Kotlin телеграм бот (с тестами) - Ваш основной <span>инструмент для изучения основ языка.</span> Бесплатные тесты и практика внутри.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Бесплатные уроки  по Android разработке - Самостоятельное <span>обучение разработке Андроид приложений.</span> Понятные видеоуроки с разжеванными примерами.
Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Курс по UI/Unit тестированию - Для ручных тестировщиков, которые <span>готовы осваивать автотесты</span> с использованием актуального стека технологий. [в разработке]
Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Обучающий Android телеграм бот (с тестами) - Бесплатные <span>теоретические тесты для самопроверки.</span> А также информер на практических спринтах по Android.
Узнать подробнее
ИИ-ментор код-ревью и голосовые собесы
Открыть