Menu
Coddy logo textTech

Interfaccia Comparable

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

Mentre == ti dice se due oggetti sono uguali, a volte devi sapere quale viene prima. L'interfaccia Comparable consente di ordinare i tuoi oggetti definendo un ordine naturale.

Per rendere una classe confrontabile, implementa Comparable<T> e sovrascrivi il metodo compareTo. Questo metodo restituisce un numero negativo se this viene prima di other, zero se sono uguali e un numero positivo se this viene dopo:

class Student implements Comparable<Student> {
  String name;
  int grade;
  
  Student(this.name, this.grade);
  
  @override
  int compareTo(Student other) {
    return grade.compareTo(other.grade);
  }
}

void main() {
  var students = [
    Student('Alice', 85),
    Student('Bob', 92),
    Student('Carol', 78),
  ];
  
  students.sort();
  
  for (var s in students) {
    print('${s.name}: ${s.grade}');
  }
  // Carol: 78, Alice: 85, Bob: 92
}

Una volta che la tua classe implementa Comparable, puoi usare sort() senza fornire un comparatore personalizzato. I tipi numerici e stringa integrati implementano già Comparable, ed è per questo che grade.compareTo(other.grade) funziona direttamente.

Per l'ordine decrescente, basta invertire il confronto scambiando gli oggetti o negando il risultato:

@override
int compareTo(Student other) {
  return other.grade.compareTo(grade);  // Decrescente
}
challenge icon

Sfida

Facile

Costruiamo un sistema di gestione delle attività in cui le attività possono essere ordinate in base al loro livello di priorità! Creerai una classe Task che implementa l’interfaccia Comparable, consentendo di ordinare automaticamente un elenco di attività dalla priorità più alta a quella più bassa.

Organizzerai il codice in due file:

  • task.dart: Crea una classe Task che rappresenta un’attività da svolgere con un name (String) e una priority (int, dove i numeri più alti indicano una priorità maggiore). La tua attività deve implementare Comparable<Task> in modo che, quando vengono ordinate, le attività compaiano in ordine decrescente di priorità (prima la priorità più alta). Inoltre, esegui l’override di toString() per restituire il formato: [name] (Priority: [priority])
  • main.dart: Importa il file delle attività e mostra come l’interfaccia Comparable consenta l’ordinamento automatico. Crea un elenco contenente queste quattro attività:
    • 'Write report' con priorità 2
    • 'Fix critical bug' con priorità 5
    • 'Update documentation' con priorità 1
    • 'Review code' con priorità 3
    Stampa Before sorting:, poi stampa ogni attività. Ordina l’elenco usando sort(), stampa una riga vuota, poi stampa After sorting: seguito di nuovo da ogni attività.

Poiché la tua classe Task implementa Comparable, puoi chiamare direttamente sort() sull’elenco senza fornire un comparatore personalizzato. Le attività si ordineranno automaticamente in base alla tua implementazione di compareTo!

Output previsto:

Before sorting:
Write report (Priority: 2)
Fix critical bug (Priority: 5)
Update documentation (Priority: 1)
Review code (Priority: 3)

After sorting:
Fix critical bug (Priority: 5)
Review code (Priority: 3)
Write report (Priority: 2)
Update documentation (Priority: 1)

Provalo tu

import 'task.dart';

void main() {
  // TODO: Crea un elenco di oggetti Task con i seguenti elementi:
  // - 'Write report' con priorità 2
  // - 'Fix critical bug' con priorità 5
  // - 'Update documentation' con priorità 1
  // - 'Review code' con priorità 3
  
  List<Task> tasks = [
    // TODO: Aggiungi qui i quattro task
  ];
  
  // TODO: Stampa "Before sorting:"
  // TODO: Stampa ogni task nell'elenco
  
  // TODO: Ordina l'elenco usando sort()
  
  // TODO: Stampa una riga vuota
  
  // TODO: Stampa "After sorting:"
  // TODO: Stampa ogni task nell'elenco ordinato
}
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