Kotlin strengskabeloner

1. Oversigt

I denne vejledning forklarer vi, hvad Kotlin har Snor skabeloner er, og hvordan man bruger dem.

For at blive fortrolig med andre funktioner og vide, hvordan du bruger Kotlin, skal du kigge på en af ​​vores Kotlin-tutorials.

2. Strenge i Kotlin

Ligesom i Java, Strenge i Kotlin er uforanderlige. Det betyder, at vi ikke har nogen mulighed for at ændre a Snor når det er oprettet. Vi kan dog udlede en anden Snor fra en given.

Kotlin har beriget Java Snor klasse med ekstra funktionalitet.

For eksempel metoden padEnd () giver os mulighed for at formatere a Snor, således at udtrykket:

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

Hvilket producerer en ny streng "Hej!!!!!".

3. Strengskabeloner

Strengskabeloner er Snor bogstaver, der indeholder indlejrede udtryk.

For eksempel denne kode i Java:

Strengmeddelelse = "n =" + n;

I Kotlin er bare:

val meddelelse = "n = $ n"

Ethvert gyldigt Kotlin-udtryk kan bruges i en Snor skabelon:

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

I modsætning til Java er mange Kotlins konstruktioner (men bestemt ikke alle) udtryk.

Derfor er en Snor skabelon kan også indeholde logik:

val message = "$ n er $ {hvis (n> 0)" positiv "ellers" ikke positiv "} 

Bemærk, at inde i de krøllede parenteser er der et gyldigt Kotlin-udtryk. Dette er en grund til, at vi ikke undslipper de indlejrede dobbelte citater.

Snor skabeloner løses ved at evaluere udtrykket og påberåbe sig a toString () metode til resultatet af evalueringen.

Snor skabeloner kan indlejres:

val message = "$ n er $ {if (n> 0)" positiv "ellers hvis (n <0)" negativ og $ {if (n% 2 == 0) "lige" ellers "ulige"} "andet" nul"}"

Det Snor skabelonparser begynder at løse den fra den mest indlejrede skabelon, evaluerer den og påberåber sig en toString () metode på det.

Selvom Snor skabeloner kan være indlejrede, det er en god ide at have dem så enkle som muligt. Dette er slet ikke svært, fordi Kotlin giver os mange nyttige værktøjer.

Hvad hvis vi vil bruge et rå dollartegn og ikke som en del af en Snor skabelon?

Derefter undslipper vi det ved at lægge en tilbageslag foran det:

val meddelelse = "n = \ $ n"

Det, der følger dollartegnet, bliver normalt Snor - det evalueres ikke længere, og det fortolkes som det er.

4. Rå strenge

I Kotlin har vi derudover tredobbelt citerede rå strenge, der kan indeholde specialtegn uden behov for at undslippe dem.

Den resulterende Snor er indeholdt mellem to på hinanden følgende ikke-overlappende forekomster af tredobbelt dobbelt-citat-tegn .

For eksempel i Java for at oprette korrekt a Snor der indeholder en Windows-filsti til en ressource placeret på C: \ Repository \ read.me, vi skal definere det på denne måde:

Strengsti = "C: \ Repository \ read.me"

I Kotlin kan vi bruge den tredobbelte citerede notation for at opnå det samme resultat:

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

Vi kan bruge denne notation til at oprette en multi-line Snor:

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

Hvilket skaber en Snor der strækker sig over nøjagtigt to linjer. Hvis vi foretrækker denne indrykning:

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

Vi bruger en trimMargin () metode, der eliminerer eventuelle hvide mellemrum fra starten af ​​hver linje op til den første forekomst af marginpræfikset (> i eksemplet ovenfor).

Triple-citerede strenge understøtter ikke nogen escape-sekvenser. Det betyder, at hvis vi skrev

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

for at få en to-linje Snor, vi får en enkelt linje, der indeholder tegnene \ n i stedet for det forventede linjeskift.

Triple-citeret Strenge dog understøtter skabeloner.

Det betyder, at enhver sekvens, der starter med dollartegnet, bliver løst til en streng på en måde som vi har beskrevet i det foregående afsnit. Vi kan bruge denne kendsgerning for at få flugttegnene til at fungere:

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

5. Konklusion

I denne artikel har vi betragtet et træk ved Kotlin-sproget, der ikke findes i Java - Snor skabeloner. Vi har illustreret deres anvendelse i tilfælde af sædvanlig og multi-line Strenge.

Du finder muligvis alle kodestykker, der er nævnt her, i vores lager på GitHub.