Eu escrevi uma função que solicita a entrada de um usuário até que ele insira um número inteiro positivo (um número natural). Alguém disse que eu não deveria lançar e capturar exceções em minha função e deixar que o chamador de minha função lide com elas.
Eu me pergunto o que outros desenvolvedores pensam sobre isso. Também provavelmente estou usando mal exceções na função. Aqui está o código em 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;
}
Estou interessado em duas coisas:
- Devo deixar o chamador se preocupar com exceções? O ponto da função é que incomoda o usuário até que ele insira um número natural. O ponto da função é ruim? Não estou falando de interface do usuário (o usuário não consegue sair do loop sem a entrada adequada), mas de entrada em loop com exceções tratadas.
- Você diria que a instrução throw (neste caso) é um uso indevido de exceções? Eu poderia criar facilmente um sinalizador para verificar a validade do número e enviar a mensagem de aviso com base nesse sinalizador. Mas isso adicionaria mais linhas ao código e acho que é perfeitamente legível.
O problema é que muitas vezes escrevo uma função de entrada separada. Se o usuário precisar inserir um número várias vezes, eu crio uma função separada para entrada que lida com todas as exceções e limitações de formatação.