Ce face Record
Un record grupează câteva valori fără să definești o clasă: ('Ana', 21) sau (nume: 'Ana', varsta: 21). Câmpurile poziționale se citesc cu $1, $2…, iar cele numite după nume (r.nume). Toate record-urile sunt de tipul Record, iar tipul exact arată ca (String, int).
Record-urile sunt imutabile și se compară după conținut: două record-uri cu aceeași formă și aceleași valori sunt egale (==) și au același hashCode. Sunt ideale pentru a returna mai multe valori dintr-o funcție și pentru chei compuse în Map.
Le desfaci ușor cu pattern-uri: var (nume, varsta) = persoana;. Sintaxa completă și regulile de tip sunt explicate pe pagina records.
Exemple
Exemplul 1: Record-uri și tipul Record
void main() {
var elev = ('Ana', 9.5);
var punct = (x: 3, y: 4);
print(elev);
print(elev.$1);
print(punct.y);
print(punct.runtimeType);
print((1, 'a') == (1, 'a'));
print((x: 1, y: 2) == (y: 2, x: 1));
print({(1, 2): 'colț'}[(1, 2)]);
}
Rezultat
(Ana, 9.5)
Ana
4
({int x, int y})
true
true
colț
Exemplul 2: Mai multe valori returnate dintr-o funcție
(double medie, int minim, int maxim) statistici(List<int> note) {
var suma = note.reduce((a, b) => a + b);
var sortate = [...note]..sort();
return (suma / note.length, sortate.first, sortate.last);
}
void main() {
var (medie, minim, maxim) = statistici([9, 7, 10, 8, 6]);
print('Media ${medie.toStringAsFixed(2)}, minim $minim, maxim $maxim');
var rezultat = statistici([5, 5]);
print(rezultat);
}
Rezultat
Media 8.00, minim 6, maxim 10
(5.0, 5, 5)
Greșeli frecvente
- Încerci să modifici un câmp:
elev.$1 = 'Ion'nu compilează. Record-urile sunt imutabile; creează unul nou. - Numeri câmpurile de la 0. Primul câmp pozițional este
$1.
Comenzi înrudite
records: Grupuri de valori anonime și imutabile, de forma (a, b) sau (nume: a), ideale pentru a întoarce mai multe valori.pattern-uri (destructurare): Desfac o valoare (record, listă, map, obiect) în variabile separate, într-o singură declarație.Object.hashCode: Un număr asociat obiectului, folosit de Set și Map; obiectele egale cu == trebuie să aibă același hashCode.