Functions and Records
Records with Named Fields
A record can carry named fields with ({String name, int score}). Named fields make the call site and field access self-documenting while still avoiding a full class declaration.
Program
Play the program to build a named-field record and read its fields with dot syntax.
record_named_fields.dart
Replay: real traced execution (multi-file project)
({String name, int score}) buildScore(String name, int score) {
return (name: name, score: score);
}
void main() {
var points = 42;
var result = buildScore('Ada', points);
var message = '${result.name}: ${result.score}';
print(message);
}
({String name, int score}) buildScore(String name, int score) {
return (name: name, score: score);
}
void main() {
var points = 18;
var result = buildScore('Ada', points);
var message = '${result.name}: ${result.score}';
print(message);
}
({String name, int score}) buildScore(String name, int score) {
return (name: name, score: score);
}
void main() {
var points = 75;
var result = buildScore('Ada', points);
var message = '${result.name}: ${result.score}';
print(message);
}
points ← 42
5void main() {6 var points = 42;7 var result = buildScore('Ada', points);values this step42pointscall ← buildScore(Ada, 42)
6var points = 42;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this stepbuildScore(Ada, 42)call42pointsreturn value ← (name: Ada, score: 42)
1({String name, int score}) buildScore(String name, int score) {2 return (name: name, score: score);3}values this step(name: Ada, score: 42)return valueAdaname42scoreresult ← (name: Ada, score: 42)
6var points = 42;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this step(name: Ada, score: 42)resultmessage ← Ada: 42
7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);values this stepAda: 42messageAdaresult.name42result.scoreprint(message);
8 var message = '${result.name}: ${result.score}';9 print(message);10}outputAda: 42values this stepAda: 42message
points ← 18
5void main() {6 var points = 18;7 var result = buildScore('Ada', points);values this step18pointscall ← buildScore(Ada, 18)
6var points = 18;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this stepbuildScore(Ada, 18)call18pointsreturn value ← (name: Ada, score: 18)
1({String name, int score}) buildScore(String name, int score) {2 return (name: name, score: score);3}values this step(name: Ada, score: 18)return valueAdaname18scoreresult ← (name: Ada, score: 18)
6var points = 18;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this step(name: Ada, score: 18)resultmessage ← Ada: 18
7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);values this stepAda: 18messageAdaresult.name18result.scoreprint(message);
8 var message = '${result.name}: ${result.score}';9 print(message);10}outputAda: 18values this stepAda: 18message
points ← 75
5void main() {6 var points = 75;7 var result = buildScore('Ada', points);values this step75pointscall ← buildScore(Ada, 75)
6var points = 75;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this stepbuildScore(Ada, 75)call75pointsreturn value ← (name: Ada, score: 75)
1({String name, int score}) buildScore(String name, int score) {2 return (name: name, score: score);3}values this step(name: Ada, score: 75)return valueAdaname75scoreresult ← (name: Ada, score: 75)
6var points = 75;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';values this step(name: Ada, score: 75)resultmessage ← Ada: 75
7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);values this stepAda: 75messageAdaresult.name75result.scoreprint(message);
8 var message = '${result.name}: ${result.score}';9 print(message);10}outputAda: 75values this stepAda: 75message
named record type
`({String name, int score})` declares a record with two named fields.
record literal
`(name: name, score: score)` stores values under field names instead of positions.
field access
`result.name` and `result.score` read the named fields directly, so later code does not rely on tuple order.