Menu
Coddy logo textTech

Gestire le eccezioni con 'on'

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 40 di 65.

Sebbene il blocco try-catch di base intercetti qualsiasi eccezione si verifichi, a volte è necessario gestire diversi tipi di eccezioni in modi diversi. La parola chiave on consente di intercettare tipi specifici di eccezioni e fornire risposte su misura per ciascuno.

Invece di intercettare tutte le eccezioni con un catch generico, puoi scegliere eccezioni specifiche usando on seguito dal tipo di eccezione. Questo ti dà un maggiore controllo su come il tuo programma risponde a diverse situazioni di errore.

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

In questo esempio, il codice intercetta specificamente una FormatException, che si verifica quando si tenta di analizzare del testo non valido come numero. Questo ti consente di fornire un messaggio chiaro e comprensibile per l’utente che affronta direttamente il problema, invece di mostrare un messaggio di errore generico che potrebbe confondere gli utenti.

Puoi anche combinare più blocchi on per gestire diversi tipi di eccezioni con risposte appropriate, rendendo la gestione degli errori precisa e intuitiva.

challenge icon

Sfida

Facile

Crea un programma che mostri come intercettare eccezioni specifiche usando la parola chiave on. Il programma elaborerà diversi tipi di input dell’utente e gestirà tipi specifici di eccezioni con messaggi di errore personalizzati.

  1. Leggi una stringa di input che rappresenta il tipo di espressione matematica ("parse", "divide" o "access")
  2. Leggi una stringa di input che rappresenta il primo valore
  3. Leggi una stringa di input che rappresenta il secondo valore (se applicabile)
  4. In base al tipo di espressione, esegui l’operazione corrispondente usando la gestione specifica delle eccezioni:
    • Per "parse": converti il primo valore in un intero usando int.parse() e intercetta specificamente FormatException
    • Per "divide": analizza entrambi i valori come interi ed esegui la divisione, intercettando FormatException in caso di errori di analisi
    • Per "access": crea una lista con il primo valore e accedi all’indice specificato dal secondo valore, intercettando RangeError in caso di indici non validi
  5. Visualizza i risultati o i messaggi di errore specifici nel formato esatto mostrato di seguito

Ad esempio, se gli input sono "parse", "42", "unused", il programma dovrebbe produrre:

Operation: parse
Input: 42
Parsing successful!
Result: 42

Se gli input sono "parse", "xyz", "unused", il programma dovrebbe produrre:

Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integer

Se gli input sono "divide", "10", "2", il programma dovrebbe produrre:

Operation: divide
Values: 10, 2
Division successful!
Result: 5

Se gli input sono "divide", "10", "abc", il programma dovrebbe produrre:

Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbers

Se gli input sono "access", "hello", "1", il programma dovrebbe produrre:

Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0

Il programma deve usare blocchi try-catch separati con la parola chiave on per intercettare specificamente FormatException e RangeError. Ogni tipo di eccezione deve avere un messaggio di errore personalizzato che spieghi chiaramente cosa è andato storto. Per l’operazione "access", crea una lista contenente solo il primo valore di input e prova ad accedere all’indice specificato dal secondo valore di input.

Provalo tu

import 'dart:io';

void main() {
  // Leggi l'input
  String? operation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // Mostra le informazioni sull'operazione
  print('Operation: $operation');
  
  // TODO: Scrivi il tuo codice qui sotto
  // Usa blocchi try-catch con la parola chiave 'on' per gestire eccezioni specifiche
  // Gestisci FormatException per le operazioni parse e divide
  // Gestisci RangeError per l'operazione access
  
}
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 Logica e flusso

Esercitati da solo: Compilatore Dart online