Ho scritto una funzione che richiede all'utente un input fino a quando l'utente non inserisce un numero intero positivo (un numero naturale). Qualcuno ha detto che non avrei dovuto gettare e catturare eccezioni nella mia funzione e che avrei dovuto gestirle il chiamante della mia funzione.
Mi chiedo cosa ne pensano gli altri sviluppatori. Probabilmente sto anche abusando delle 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 assilla l'utente finché l'utente non inserisce un numero naturale. Il punto della funzione è negativo? Non sto parlando dell'interfaccia utente (l'utente non è in grado di uscire dal ciclo senza l'input corretto), ma dell'input in loop con le eccezioni gestite.
- Diresti che la dichiarazione di 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 ciò aggiungerebbe più righe al codice e penso che sia perfettamente leggibile così com'è.
Il fatto è che scrivo spesso 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 limitazioni di formattazione.