Шаблоны строк Kotlin

Kotlin String Templates

1. обзор

В этом руководстве мы объясним, что такое шаблоны KotlinString и как их использовать.

Чтобы познакомиться с другими функциями и узнать, как использовать Kotlin, взгляните на один из нашихKotlin tutorials.

2. Струны в Котлине

Как и в Java,Stringsв Kotlin неизменяемы. Это означает, что у нас нет возможности изменитьString после его создания. Однако мы можем вывести другойString из данного.

Kotlin обогатил класс JavaString дополнительной функциональностью.

Например, методpadEnd() позволяет нам отформатироватьString, так, чтобы выражение:

"Hello".padEnd(10, '!')

Это создает новую строку“Hello!!!!!”.

3. Шаблоны строк

Строковые шаблоны - это литералыString, содержащие встроенные выражения.

Например, этот код в Java:

String message = "n = " + n;

В Котлине есть только:

val message = "n = $n"

В шаблонеString можно использовать любое допустимое выражение Kotlin:

val message = "n + 1 = ${n + 1}"

Unlike Java, many Kotlin’s constructs (but certainly, not all) are expressions.

Следовательно, шаблонString также может содержать логику:

val message = "$n is ${if(n > 0) "positive" else "not positive"}

Обратите внимание, что внутри фигурных скобок находится допустимое выражение Kotlin. Это причина, по которой мы не избегаем вложенных двойных кавычек.

ШаблоныString разрешаются путем оценки выражения и вызова методаtoString() для результата оценки.

ШаблоныString могут быть вложенными:

val message = "$n is ${if (n > 0) "positive" else
  if (n < 0) "negative and ${if (n % 2 == 0) "even" else "odd"}" else "zero"}"

Парсер шаблонаString начинает разрешать его из наиболее вложенного шаблона, оценивает его и вызывает для него методtoString().

Хотя шаблоныString могут быть вложенными, рекомендуется сделать их как можно более простыми. Это совсем несложно, потому что Kotlin предоставляет нам множество полезных инструментов.

Что, если мы хотим использовать необработанный знак доллара, а не как часть шаблонаString?

Затем мы избегаем его, помещая перед ним обратную косую черту:

val message = "n = \$n"

То, что следует за знаком доллара, становится обычнымString - оно больше не вычисляется и интерпретируется как есть.

4. Сырые строки

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

РезультирующийString содержится между двумя последовательными неперекрывающимися вхождениями тройных двойных кавычек.

Например, в Java, чтобы правильно создатьString, содержащий путь к файлу в стиле Windows к ресурсу, расположенному вC:\Repository ead.me,, мы должны определить его следующим образом:

String path = "C:\\Repository\\read.me"

В Kotlin мы можем использовать обозначение в тройных кавычках для достижения того же результата:

val path = """C:\Repository\read.me"""

Мы можем использовать это обозначение для создания многострочногоString:

val receipt = """Item 1: $1.00
Item 2: $0.50"""

Это создаетString, который охватывает ровно две строки. Если мы предпочитаем этот отступ:

val receipt = """Item 1: $1.00
                >Item 2: $0.50""".trimMargin(">")

Мы используем методtrimMargin(), который удаляет возможные пробелы от начала каждой строки до первого появления префикса поля (> в приведенном выше примере).

Triple-quoted strings don’t support any escape sequences. Это означает, что если мы написали

val receipt = """Item 1: $1.00\nItem 2: $0.50"""

чтобы получить двухстрочныйString,, мы должны получить одну строку, содержащую символы вместо ожидаемого разрыва строки.

ОднакоStringsс тройными кавычками поддерживают шаблоны.

Это означает, что любая последовательность, начинающаяся со знака доллара, преобразуется в строку способом, который мы описали в предыдущем разделе. Мы можем использовать этот факт, чтобы заставить работать escape-символы:

val receipt = """Item 1: $1.00${"\n"}Item 2: $0.50"""

5. Заключение

В этой статье мы рассмотрели одну особенность языка Kotlin, которая отсутствует в Java - шаблоныString. Мы проиллюстрировали их использование для обычного и многострочногоStrings.

Вы можете найти все упомянутые здесь фрагменты кода в нашем репозиторииon GitHub.