Menu
Coddy logo textTech

Record (Dart 3)

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 86 di 110.

Dart 3 ha introdotto i record: un modo leggero per raggruppare più valori senza creare una classe completa. I record sono immutabili, hanno l'uguaglianza integrata e sono perfetti per restituire più valori da una funzione o raggruppare temporaneamente dati correlati.

Crea un record racchiudendo i valori tra parentesi:

void main() {
  // Un record semplice con due valori
  var point = (10, 20);
  print(point.$1);  // 10 - accedi al primo elemento
  print(point.$2);  // 20 - accedi al secondo elemento
  
  // Record con campi denominati
  var person = (name: 'Alice', age: 30);
  print(person.name);  // Alice
  print(person.age);   // 30
}

I campi posizionali si accedono con $1, $2, ecc., mentre per i campi denominati si usano direttamente i loro nomi. Puoi combinare entrambi gli stili in un singolo record.

I record brillano quando restituiscono più valori dalle funzioni: non serve creare una classe solo per restituire due dati:

(int, int) divideWithRemainder(int a, int b) {
  return (a ~/ b, a % b);
}

(String name, int age) getUser() {
  return ('Bob', 25);
}

void main() {
  var (quotient, remainder) = divideWithRemainder(17, 5);
  print('$quotient remainder $remainder');  // 3 remainder 2
  
  var (name, age) = getUser();
  print('$name is $age');  // Bob is 25
}

I record supportano automaticamente l’uguaglianza in base ai loro valori, rendendoli pratici per i confronti senza dover implementare personalmente ==. Usa i record quando hai bisogno di semplici raggruppamenti di dati immutabili; usa le classi quando ti servono metodi, mutabilità o comportamenti più complessi.

challenge icon

Sfida

Facile

Costruiamo un sistema di coordinate usando i record! Creerai funzioni che lavorano con punti 2D rappresentati come record, mostrando come i record rendano semplice restituire e usare più valori correlati senza creare classi complete.

Organizzerai il codice in due file:

  • geometry.dart: crea funzioni che usano i record per lavorare con i dati delle coordinate:
    • Una funzione createPoint(int x, int y) che restituisce un record con i campi denominati x e y. Il tipo restituito dovrebbe essere ({int x, int y})
    • Una funzione midpoint(({int x, int y}) p1, ({int x, int y}) p2) che calcola e restituisce il punto medio tra due punti come record con campi denominati. Usa la divisione intera (~/) per il calcolo
    • Una funzione distance(({int x, int y}) p1, ({int x, int y}) p2) che restituisce un record con campi posizionali: la distanza orizzontale (differenza in x) e la distanza verticale (differenza in y). Il tipo restituito dovrebbe essere (int, int). Calcola p2.x - p1.x e p2.y - p1.y
  • main.dart: importa il tuo file geometry e mostra i record in azione:
    • Crea due punti usando createPoint: il punto A in (2, 4) e il punto B in (10, 8)
    • Stampa Point A: ([x], [y]) usando i campi denominati
    • Stampa Point B: ([x], [y]) usando i campi denominati
    • Calcola il punto medio e stampa Midpoint: ([x], [y])
    • Calcola la distanza e usa la destrutturazione per estrarre i valori nelle variabili dx e dy, poi stampa Distance: dx=[dx], dy=[dy]

Nota come i record ti permettono di restituire più valori in modo pulito: campi denominati per maggiore chiarezza quando il significato è importante, e campi posizionali quando il contesto è ovvio!

Output previsto:

Point A: (2, 4)
Point B: (10, 8)
Midpoint: (6, 6)
Distance: dx=8, dy=4

Provalo tu

import 'geometry.dart';

void main() {
  // TODO: Crea il punto A in (2, 4) usando createPoint
  
  // TODO: Crea il punto B in (10, 8) usando createPoint
  
  // TODO: Stampa Point A usando i campi con nome: Point A: ([x], [y])
  
  // TODO: Stampa Point B usando i campi con nome: Point B: ([x], [y])
  
  // TODO: Calcola il punto medio e stampa: Midpoint: ([x], [y])
  
  // TODO: Calcola la distanza e usa la destrutturazione per assegnare i valori a dx e dy
  // Poi stampa: Distance: dx=[dx], dy=[dy]
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online