string interpolation în Dart

Introduce valori în texte cu $variabila sau ${expresie}, fără concatenare cu +.

Sintaxă
'Bună, $nume!'                // o variabilă
'Total: ${a + b} lei'         // o expresie
'Preț: \$5'                    // semnul $ scris ca atare
r'C:\fisiere\$nume'            // text brut, fără interpolare
'''text pe
mai multe rânduri'''

Ce face string interpolation

Într-un String (cu ghilimele simple sau duble), $nume este înlocuit cu valoarea variabilei, iar ${expresie} cu rezultatul oricărei expresii: calcule, apeluri de metode, operatorul ternar. Pentru valorile care nu sunt text se apelează automat toString().

Acoladele sunt obligatorii pentru orice e mai mult decât un nume simplu: '${elev.nume}', nu '$elev.nume', care ar afișa obiectul urmat de textul „.nume”.

Semnul $ ca atare se scrie \$. Un text brut (raw), cu r în față, nu face nici interpolare, nici secvențe \n. Ghilimelele triple (''' sau """) permit texte pe mai multe rânduri.

Exemple

Exemplul 1: Variabile și expresii

$nume pentru variabile simple, ${...} pentru expresii.

void main() {
  final nume = 'Ioana';
  final note = [9, 10, 8];
  final media = note.reduce((a, b) => a + b) / note.length;

  print('Eleva $nume are ${note.length} note: $note');
  print('Media: ${media.toStringAsFixed(2)}, ${media >= 9 ? 'foarte bine' : 'bine'}');
  print('Numele are ${nume.length} litere: ${nume.toUpperCase()}');
}

Rezultat

Eleva Ioana are 3 note: [9, 10, 8]
Media: 9.00, foarte bine
Numele are 5 litere: IOANA

Exemplul 2: Câmpuri de obiect și semnul $

Fără acolade, $p.nume ar afișa obiectul întreg. \$ scrie semnul dolar.

class Produs {
  final String nume;
  final double pret;
  Produs(this.nume, this.pret);
  @override
  String toString() => 'Produs($nume)';
}

void main() {
  final p = Produs('Căști', 149.99);
  print('Greșit: $p.nume');
  print('Corect: ${p.nume} costă ${p.pret} lei');
  print('Preț în dolari: \$${(p.pret / 4.58).toStringAsFixed(2)}');
}

Rezultat

Greșit: Produs(Căști).nume
Corect: Căști costă 149.99 lei
Preț în dolari: $32.75

Exemplul 3: Texte brute și pe mai multe rânduri

r'...' lasă \n și $ neatinse; ghilimelele triple păstrează rândurile noi.

void main() {
  const cale = r'C:\Users\ana\nou\$fisier.txt';
  print(cale);

  final client = 'Vasile Pop';
  final suma = 245.5;
  final mesaj = '''
Stimate $client,
Factura dumneavoastră este de $suma lei.
Mulțumim!''';
  print(mesaj);
}

Rezultat

C:\Users\ana\nou\$fisier.txt
Stimate Vasile Pop,
Factura dumneavoastră este de 245.5 lei.
Mulțumim!

Greșeli frecvente

  • '$obiect.camp' în loc de '${obiect.camp}': se afișează toString()-ul obiectului urmat de „.camp”.
  • Concatenare cu + și toString() ('Ai ' + varsta.toString() + ' ani'): interpolarea este mai scurtă și mai clară.
  • Prețuri scrise cu $ nescăpat ('Cost: $5'): eroare, $5 nu este un nume valid. Scrie \$5 sau folosește un text brut.

Comenzi înrudite

  • var: Declară o variabilă care se poate modifica; tipul este dedus automat din valoarea inițială.
  • comentarii și documentare: Textul ignorat de compilator: // pe un rând, /* */ pe mai multe, și /// pentru documentația generată cu dart doc.
  • collection if și for: if și for direct în interiorul unei liste, set sau map, pentru a construi colecția dintr-o singură expresie.