Ho scritto una funzione che richiede un input all'utente finché l'utente non immette un numero intero positivo (un numero naturale). Qualcuno ha detto che non dovrei lanciare e catturare eccezioni nella mia funzione e lasciare che sia il caller della mia funzione a gestirle.
Mi chiedo cosa ne pensano gli altri sviluppatori di questo. Probabilmente sto anche sfruttando le eccezioni nella funzione. Ecco il codice in Java:
private static int sideInput()
{
int side = 0;
String input;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("Side length: ");
input = scanner.nextLine();
try {
side = Integer.parseInt(input);
if (side <= 0) {
// probably a misuse of exceptions
throw new NumberFormatException();
}
}
catch (NumberFormatException numFormExc) {
System.out.println("Invalid input. Enter a natural number.");
}
} while (side <= 0);
return side;
}
Sono interessato a due cose:
- Devo lasciare che il chiamante si preoccupi delle eccezioni? Il punto della funzione è che rimpicciolisce l'utente fino a quando l'utente non immette un numero naturale. Il punto della funzione è negativo? Non sto parlando di UI (l'utente non è in grado di uscire dal ciclo senza input corretto), ma di input in loop con eccezioni gestite.
- Diresti che l'affermazione del lancio (in questo caso) è un abuso di eccezioni? Potrei facilmente creare un flag per verificare la validità del numero e generare il messaggio di avviso basato su quel flag. Ma questo aggiungerebbe più linee al codice e penso che sia perfettamente leggibile così com'è.
Il fatto è che spesso scrivo una funzione di input separata. Se l'utente deve inserire un numero più volte, creo una funzione separata per l'input che gestisce tutte le eccezioni e le limitazioni di formattazione.