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ă. Scriereturn sb.toString();. - Construiești un text mare cu
+=într-o buclă de mii de pași. Funcționează, dar este mai lent; foloseșteStringBuffer.
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.