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

шаблонные строки. Конкатенация 1 - Android [Kotlin] для начинающих

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

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

println("Какой будет ваш главный вопрос?

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

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

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

val greetings = "Здравствуйте"
val space = ' '
println(greeting + "!" + space + "Какой будет ваш главный вопрос?")

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

 val userName = "Звездный Лорд"

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

println(greetings + ", " + userName + "!" + space + "Какой" + space + "будет ваш главный вопрос?")

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

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

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

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

println("$greetings, $userName! Какой будет ваш главный вопрос?")

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

println("На который можно ответить ${40 + 2}")

Вывод в консоль:

На который можно ответить 42

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

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

Функция trimIndent()

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

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

val multiString = """
               строка 1
          строка 2
              строка 3
    """.trimIndent()
    println(multiString)

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

  строка 1
строка 2
    строка 3

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

val multiString = """
               строка 1
          строка 2
              строка 3
    """
    println(multiString)
            строка 1
          строка 2
              строка 3
    

Функция trimMargin()

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

val multiString = """
               |строка 1
          |строка 2
              |строка 3
    """.trimMargin()
   println(multiString)
строка 1
строка 2
строка 3

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

Для тех, кто собрался стать Android-разработчиком

Пошаговаясхема
Пошаговая
схема

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

Бесплатныеуроки
Бесплатные
уроки

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

Обучающийбот
Обучающий
бот

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

Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *