📦 Agrupar datos relacionados
Un rexistro (record) reúne varios valores nun só dato, sen crear unha clase. Cada campo ten o seu tipo. Por exemplo, podemos gardar xuntos o nome dun alumno (String) e a súa nota (int).
🔢 Campos posicionais
Escribimos os valores entre parénteses, separados por comas. Accedemos con .$1, .$2… As posicións dos rexistros empezan en 1, a diferenza dos índices das listas.
(String, int) alumno = ('Xurxo', 7);
print(alumno.$1); // Xurxo
print(alumno.$2); // 7
(String, int) é o tipo; ('Xurxo', 7) é o valor. Tamén podemos escribir var alumno = ('Xurxo', 7); e deixar que Dart deduza o tipo.
🏷️ Campos nomeados
Se damos nome aos campos, o acceso resulta máis claro:
final alumno = (nome: 'Iria', nota: 9);
print(alumno.nome); // Iria
print(alumno.nota); // 9
Se queremos indicar o tipo de forma explícita, os campos nomeados van entre chaves dentro dos parénteses:
({String nome, int nota}) alumno = (nome: 'Iria', nota: 9);
print('${alumno.nome}: ${alumno.nota}'); // Usamos os nomes dos campos.
Fíxate na diferenza: o tipo é ({String nome, int nota}) e o valor é (nome: 'Iria', nota: 9).
- Os nomes forman parte do tipo
- A orde dos campos nomeados non importa.
({String nome, int nota}) alumno = (nome: 'Iria', nota: 9);
print('${alumno.nome}: ${alumno.nota}'); // Usamos os nomes dos campos.
(String nome, int nota) alumno2 = ('Xoel', 8);
(String, int) alumno3 = ('Anxo', 8);
// alumno = alumno2; // ERRO: tipos distintos.
// alumno = alumno3; // ERRO: tipos distintos.
alumno2 = alumno3; // OK: son do mesmo tipo.
🔐 Os campos non se poden reasignar
Un rexistro ten un número fixo de campos e non podemos cambiar o valor dun campo. Se a variable non é final, podemos asignarlle outro rexistro compatible:
var alumno = (nome: 'Roi', nota: 4);
// alumno.nota = 6; // Non válido: o campo non se pode reasignar.
alumno = (nome: 'Roi', nota: 6); // Substituímos o rexistro completo.
print(alumno);
Se un campo contén unha lista modificable, esa lista si pode cambiar por dentro. O que non podemos facer é asignar outra lista a ese campo.
⚖️ Comparar rexistros
Dous rexistros son iguais se teñen a mesma estrutura e os valores dos campos correspondentes son iguais.
Nos campos nomeados, a orde non importa, pero si o nome dos campos:
final primeiro = (nome: 'Iria', nota: 9);
final segundo = (nota: 9, nome: 'Iria');
print(primeiro == segundo); // true
📋 Gardar rexistros nunha lista
Unha lista permite reunir varios rexistros do mesmo tipo. List<({String nome, int nota})> significa «lista de rexistros cun nome e unha nota».
Nun mapa relacionabamos unha clave cun valor; nun rexistro agrupamos campos fixos cos seus tipos. Para o proxecto podemos escoller a estrutura que mellor represente os datos.
🧪 Exemplo completo
🔗 Ver o código en DartPad — https://dartpad.dev/?id=bde769dba546fba6df383231ad5e9eda
No apartado de funcións veremos como devolver varios datos xuntos nun rexistro. Extraer os campos en variables mediante desestruturación queda en «Para saber máis».
📚 Consulta: rexistros en Dart — https://dart.dev/language/records.