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.

points
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);
}
  1. points ← 42

    5void main() {6  var points = 42;7  var result = buildScore('Ada', points);
    values this step42points
  2. call ← buildScore(Ada, 42)

    6var points = 42;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';
    values this stepbuildScore(Ada, 42)call42points
  3. return 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 valueAdaname42score
  4. result ← (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)result
  5. message ← Ada: 42

    7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);
    values this stepAda: 42messageAdaresult.name42result.score
  6. print(message);

    8  var message = '${result.name}: ${result.score}';9  print(message);10}
    outputAda: 42
    values this stepAda: 42message
  1. points ← 18

    5void main() {6  var points = 18;7  var result = buildScore('Ada', points);
    values this step18points
  2. call ← buildScore(Ada, 18)

    6var points = 18;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';
    values this stepbuildScore(Ada, 18)call18points
  3. return 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 valueAdaname18score
  4. result ← (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)result
  5. message ← Ada: 18

    7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);
    values this stepAda: 18messageAdaresult.name18result.score
  6. print(message);

    8  var message = '${result.name}: ${result.score}';9  print(message);10}
    outputAda: 18
    values this stepAda: 18message
  1. points ← 75

    5void main() {6  var points = 75;7  var result = buildScore('Ada', points);
    values this step75points
  2. call ← buildScore(Ada, 75)

    6var points = 75;7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';
    values this stepbuildScore(Ada, 75)call75points
  3. return 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 valueAdaname75score
  4. result ← (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)result
  5. message ← Ada: 75

    7var result = buildScore('Ada', points);8var message = '${result.name}: ${result.score}';9print(message);
    values this stepAda: 75messageAdaresult.name75result.score
  6. print(message);

    8  var message = '${result.name}: ${result.score}';9  print(message);10}
    outputAda: 75
    values 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.