Необработанные строки, как они отличаются от экранированных строк и где их следует использовать - PullRequest
0 голосов
/ 20 сентября 2018

Согласно моему исследованию,

Kotlin имеет два типа строковых литералов: -

Экранированные строки , в которых могут быть экранированные символы.

val s = "Hello ,World\n" +
    "from escaped string\n"+
    "kotlin"

Необработанная строка ограничена тройной кавычкой ("" "), не содержит экранирования и может содержать символы новой строки и любые другие символы:

val m = """Hello, World
       |from raw string
       |kotlin """.trimMargin()

Эти строкиможет использоваться в нескольких строках без необходимости конкатенации каждой строки и без экранирования.

Используем ли мы необработанные строки только для простоты и простоты реализации, или они обеспечивают лучшую производительность в любом случае?

И есть ли другие варианты использования, в которых мы должны рассмотреть использование необработанных строк?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Ваш ответ хорошо объяснен здесь на этом сайте .Я собираюсь включить только существенную часть этого здесь.

Строка в Kotlin может использоваться несколькими способами, как описано в приведенной выше ссылке.Это зависит исключительно от требований, которые необходимо использовать.Если у вас есть очень большая строка, такая как html-страница и т. Д., Вы можете использовать Необработанную строку , разделенную тройной кавычкой ("" "). И там, где у вас есть short Строки, тогда вы можете использовать Экранированные строки .

Нет реальной разницы в производительности между ними, но зависит от того, сколько конкатенации строк вы используете при построении значений в ней.

0 голосов
/ 09 апреля 2019

Вариант использования: раскраска синтаксиса запросов в запросах Room

С необработанными строками Kotlin вы можете писать запросы на несколько строк в Dao Room, например:

@Dao
interface HappyDao {
    @Query(
            """
            SELECT
            One,
            Two,
            Three
            FROM MYTABLE
            """
    )
    fun getAll(): List<MyObject>
}

И все же имеет синтаксическую раскраску валидатора Room, как будто вы пишете все в одну строку (вместе с предупреждениями об ошибках синтаксиса запросов во время написания кода).Это особенно полезно для длинных запросов, со многими полями или объединениями.

Без необработанных строк это будет выглядеть так:

@Dao
interface HappyDao {
    @Query(
            "SELECT" +
            "One," +
            "Two," +
            "Three" +
            " FROM MYTABLE"
    )
    fun getAll(): List<MyObject>
}

и не принесет пользы для раскраски синтаксиса Room.

0 голосов
/ 20 сентября 2018

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

Предопределенные классы символов и многиедругие конструкции в регулярных выражениях вводятся символом \ (например, \s для соответствия символу пробела).Когда вы включаете их в строку, вам нужно их избегать: поэтому для любого такого символа в регулярном выражении вам нужно написать два, например "\\d", чтобы соответствовать одной цифре.

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

Обратите внимание, что необработанные строки не являютсяновая концепция или идея, представленная Kotlin.Например, у Python они уже давно.

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