![Урок 3: Строки в Kotlin. Интерполяция. Конкатенация 1 3 1 scaled - Android [Kotlin] для начинающих](https://ievetrov.ru/wp-content/uploads/2022/10/3-1-scaled.jpg)
Смотрите видеоурок бесплатно на удобной для вас платформе:
Здравствуйте. Обсудим возможности строк в 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?")
Строковые шаблоны (интерполяция строк)
Смотрите, такое нагромождение кавычек и операторов сложения сложно читается и повышает риск совершить ошибку. И Kotlin позволяет изящно реализовать отображение значения переменной прямо в единой строке, используя строковые шаблоны (или шаблонные строки). По другому эта функция языка называется интерполяция строк.
Фокус в том, что мы пишем требуемый текст и вставляем переменную прямо в строку без дополнительных знаков сложения. А чтобы переменная userName
не была просто текстом, а стала носителем и передатчиком значения, необходимо добавить знак $
перед переменной. Теперь она выделена цветом для дополнительной наглядности и кликабельна.
println("$greeting, $userName! What is your main question?")
При запуске программы интерпретатор увидит в строковом литерале переменную и подставит туда значение. Переменная space
нам больше не нужна, ведь это грубо говоря теперь одна непрерывная строка с естественными пробелами. Такой шаблон строки можно создавать с любыми типами, в том числе с выражениями, с методами, логическими ветвлениями if else
и так далее.
Строковый шаблон с выражением
Но, чтобы сделать строковый шаблон с неким выражением, там где просто переменной недостаточно, это выражение нужно поместить в фигурные скобки. И перед скобками точно также ставим знак $
, чтобы это больше не было обычной строкой. Теперь при запуске метода вывода в консоль, выражение в фигурных скобках сначала выполнится, а затем на его месте в строке будет выведен результат.
println("To which you can respond ${40 + 2}")
Многострочное интерполирование
Еще одна из отличительных возможностей языка – удобная запись многострочного текста. За многострочный текст в Котлине отвечает оператор тройные кавычки. Объявим переменную и начнем инициализировать ее в виде многострочной строки в тройных кавычках.
Функция trimIndent()
Смотрите, среда разработки автоматически добавила вызов функции trimIndent()
, применимую к нашей строке. Эта функция проводит дополнительную оптимизацию – обнаруживает общий минимальный отступ (слева) у всех строк и удаляет его из каждой строки.
Вот пример. Проинициализируем переменную такой многострочной записью. Добавим рандомные отступы слева. Выведем значение переменной в консоль.
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)
Для тех, кто собрался стать Android-разработчиком

Пошаговая
схема
Описание процесса обучения от основ Kotlin до Android-разработчика

Бесплатные
уроки
Авторский бесплатный курс по основам языка программирования Kotlin

Обучающий
бот
Тренажер и самоучитель по Котлин – бесплатные тесты и практика