String templates ($nume, ${expresie}) în Kotlin

Bazele programului Kotlin 1.0 ($$"...": Kotlin 2.2)

Pun valoarea unei variabile sau a unei expresii direct în text, cu $nume sau ${expresie}.

Sintaxă
"Salut, $nume!"
"Total: ${pret * cantitate} lei"
"""text pe
   mai multe rânduri""".trimIndent()
$$"Preț: $$pret $"   // $ simplu rămâne text

Ce face String templates ($nume, ${expresie})

Într-un text între ghilimele, $nume este înlocuit cu valoarea variabilei nume, iar ${expresie} cu rezultatul oricărei expresii: un calcul, un apel de funcție, un if. Valoarea este transformată în text cu toString(). Așa nu mai ai nevoie de concatenări lungi cu +.

Acoladele sunt necesare când după nume urmează litere (${an}a) sau când accesezi ceva cu punct: "$client.nume" pune obiectul întreg urmat de textul „.nume”, pe când "${client.nume}" pune numele.

Textele cu trei ghilimele ("""...""") pot avea mai multe rânduri și nu interpretează secvențele \n. Cu trimIndent() scoți spațiile de la începutul rândurilor. Pentru un $ literal scrii \$ (sau ${'$'} în textele cu trei ghilimele). Din Kotlin 2.2, cu $$"..." doar $$ înseamnă interpolare, iar $ simplu rămâne text.

Exemple

Exemplul 1: Variabile și expresii în text

$produs pune o variabilă, ${...} pune rezultatul unui calcul sau al unui if.

fun main() {
    val produs = "caiet"
    val cantitate = 4
    val pret = 3.5
    println("Ai cumpărat $cantitate x $produs")
    println("Total: ${cantitate * pret} lei")
    println("Stoc: ${if (cantitate > 3) "puțin" else "suficient"}")
    println("Numele are ${produs.length} litere, cu majuscule: ${produs.uppercase()}")
}

Rezultat

Ai cumpărat 4 x caiet
Total: 14.0 lei
Stoc: puțin
Numele are 5 litere, cu majuscule: CAIET

Exemplul 2: Text pe mai multe rânduri

trimIndent() scoate indentarea comună, ca textul să arate ca în cod.

fun main() {
    val nume = "Ion Popescu"
    val oras = "Cluj-Napoca"
    val bon = """
        Bon fiscal
        Client: $nume
        Oraș:   $oras
        Total:  ${2 * 24.5} lei
    """.trimIndent()
    println(bon)
}

Rezultat

Bon fiscal
Client: Ion Popescu
Oraș:   Cluj-Napoca
Total:  49.0 lei

Exemplul 3: Semnul $ ca text

\$ scrie semnul dolar. În forma $$"..." (Kotlin 2.2), $ simplu este text și interpolarea se face cu $$.

fun main() {
    val curs = 4.59
    println("1 \$ costă $curs lei")
    println($$"Șablon: $nume, curs curent: $$curs")
    val client = Pair("Maria", 120)
    println("Greșit: $client.first")
    println("Corect: ${client.first}")
}

Rezultat

1 $ costă 4.59 lei
Șablon: $nume, curs curent: 4.59
Greșit: (Maria, 120).first
Corect: Maria

Greșeli frecvente

  • "$obiect.camp" fără acolade: se afișează obiectul întreg și apoi textul „.camp”. Scrie "${obiect.camp}".
  • Concatenări cu + între un număr și un text în ordinea greșită: 1 + " lei" nu compilează (Int nu are plus(String)). Folosește template-ul "$suma lei".
  • Uitarea lui trimIndent() la textele cu trei ghilimele: spațiile de indentare și primul rând gol rămân în text.

Comenzi înrudite

  • val și var: val declară o variabilă care nu mai poate fi schimbată după atribuire; var declară una care poate primi altă valoare.
  • true și false (Boolean): true și false sunt cele două valori ale tipului Boolean, folosite în condiții, comparații și operatori logici.
  • fun main(): Funcția main este punctul de pornire al oricărui program Kotlin: codul din ea se execută primul.