StringBuffer în Dart

Construiește un text din multe bucăți, eficient; la final toString() dă textul, iar clear() îl golește.

Sintaxă
StringBuffer([Object content = ''])
String toString()
void clear()

Ce face StringBuffer

Textele sunt imutabile, așa că text += bucata într-o buclă creează la fiecare pas un text nou. StringBuffer adună bucățile într-o zonă de lucru și creează textul o singură dată, când apelezi toString(). Este varianta recomandată pentru rapoarte, tabele sau fișiere generate.

Adaugi text cu write și writeln. Proprietățile length și isEmpty spun cât text s-a adunat. clear() golește bufferul ca să-l poți refolosi.

Constructorul primește opțional un conținut inițial. print(buffer) funcționează direct, pentru că print apelează singur toString(); când ai nevoie de un String (de exemplu ca valoare returnată), apelează-l explicit.

Parametri

Parametru Descriere
content Conținutul inițial (opțional); orice obiect, transformat cu toString().

Ce returnează

toString(): textul adunat, ca String. clear(): nimic.

Exemple

Exemplul 1: Un bon de cumpărături

String bon(Map<String, double> produse) {
  var sb = StringBuffer('BON FISCAL\n');
  var total = 0.0;
  produse.forEach((nume, pret) {
    sb.writeln('${nume.padRight(10)}${pret.toStringAsFixed(2).padLeft(8)}');
    total += pret;
  });
  sb.write('TOTAL     ${total.toStringAsFixed(2).padLeft(8)} lei');
  return sb.toString();
}

void main() {
  print(bon({'Pâine': 4.5, 'Lapte': 7.9, 'Mere': 6.25}));
}

Rezultat

BON FISCAL
Pâine         4.50
Lapte         7.90
Mere          6.25
TOTAL        18.65 lei

Exemplul 2: length, isEmpty și clear

void main() {
  var sb = StringBuffer();
  print(sb.isEmpty);
  sb.write('Iași');
  sb.write(', ');
  sb.write('Cluj');
  print(sb.length);
  print(sb);
  sb.clear();
  print(sb.isEmpty);
  sb.write('Brașov');
  print(sb.toString());
}

Rezultat

true
10
Iași, Cluj
true
Brașov

Greșeli frecvente

  • Returnezi bufferul dintr-o funcție care trebuie să dea String: return sb; nu compilează. Scrie return sb.toString();.
  • Construiești un text mare cu += într-o buclă de mii de pași. Funcționează, dar este mai lent; folosește StringBuffer.

Comenzi înrudite

  • StringBuffer.write: Adaugă o valoare la sfârșitul bufferului (write) sau o valoare urmată de rând nou (writeln).
  • StringBuffer.writeAll: writeAll adaugă toate elementele unei colecții, cu un separator opțional; writeCharCode adaugă un caracter după cod.
  • String: Tipul pentru text în Dart: un șir de caractere care nu se mai poate modifica după creare.
  • print: Afișează o valoare pe ecran (ieșirea standard), urmată de un rând nou.