Modelos de sequência de caracteres Kotlin

Modelos de sequência de caracteres Kotlin

1. Visão geral

Neste tutorial, explicaremos o que são os modelosString de Kotlin e como usá-los.

Para se familiarizar com outros recursos e saber como usar o Kotlin, dê uma olhada em um de nossosKotlin tutorials.

2. Cordas em Kotlin

Como em Java,Strings em Kotlin são imutáveis. Isso significa que não temos meios de alterar umString depois de criado. No entanto, podemos derivar outroString de um determinado.

O Kotlin enriqueceu a classe JavaString com funcionalidades adicionais.

Por exemplo, o métodopadEnd() nos permite formatar umString, para que a expressão:

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

O que produz uma nova string“Hello!!!!!”.

3. Modelos de String

Os modelos de string são literaisString que contêm expressões incorporadas.

Por exemplo, este código em Java:

String message = "n = " + n;

Em Kotlin é apenas:

val message = "n = $n"

Qualquer expressão Kotlin válida pode ser usada em um modeloString:

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

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

Portanto, um templateString também pode conter lógica:

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

Observe que dentro das chaves há uma expressão Kotlin válida. Esta é a razão pela qual não escapamos das aspas duplas aninhadas.

Os modelosString são resolvidos avaliando a expressão e invocando um métodotoString() no resultado da avaliação.

Os modelosString podem ser aninhados:

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

O analisador de modeloString começa a resolvê-lo a partir do modelo mais aninhado, avalia-o e invoca um métodotoString() nele.

Embora os modelosString possam ser aninhados, é uma boa ideia tê-los o mais simples possível. Isso não é nem um pouco difícil porque o Kotlin nos fornece muitas ferramentas úteis.

E se quisermos usar um cifrão bruto e não como parte de um modeloString?

Em seguida, escapamos colocando uma barra invertida na frente:

val message = "n = \$n"

O que segue o cifrão torna-se umString usual - não é mais avaliado e é interpretado como está.

4. Raw Strings

Além disso, no Kotlin, temos Strings brutas com três citações que podem conter caracteres especiais sem a necessidade de escapar deles.

OString resultante está contido entre duas ocorrências consecutivas não sobrepostas de sinais de aspas duplas triplas.

Por exemplo, em Java, para criar corretamente umString contendo um caminho de arquivo no estilo Windows para um recurso localizado emC:\Repository ead.me,, devemos defini-lo desta forma:

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

No Kotlin, podemos usar a notação entre aspas triplas para obter o mesmo resultado:

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

Podemos usar essa notação para criar umString: multilinhas

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

O que cria umString que se estende por exatamente duas linhas. Se preferirmos esse recuo:

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

Usamos um métodotrimMargin() que elimina eventuais espaços em branco desde o início de cada linha até a primeira ocorrência do prefixo de margem (> no exemplo acima).

Triple-quoted strings don’t support any escape sequences. Isso significa que se escrevemos

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

a fim de obter umString, de duas linhas, obteríamos uma única linha contendo os caracteres em vez da quebra de linha esperada.

No entanto,Strings com aspas triplas é compatível com modelos.

Isso significa que qualquer sequência que comece com o sinal de cifrão será resolvida para uma string de uma maneira como descrevemos na seção anterior. Podemos usar esse fato para fazer com que os caracteres de escape funcionem:

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

5. Conclusão

Neste artigo, consideramos um recurso da linguagem Kotlin que está ausente em Java - os modelosString. Nós ilustramos seu uso no caso deStrings. usual e multilinha

Você pode encontrar todos os trechos de código mencionados aqui em nosso repositórioon GitHub.