Я написал функцию, которая запрашивает ввод у пользователя, пока пользователь не введет положительное целое число (натуральное число). Кто-то сказал, что я не должен генерировать и перехватывать исключения в моей функции и должен позволять вызывающей стороне моей функции обрабатывать их.
Интересно, что другие разработчики думают об этом. Я также, вероятно, неправильно использую исключения в функции. Вот код на 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;
}
Я заинтересован в двух вещах:
- Должен ли я позволить вызывающей стороне беспокоиться об исключениях? Смысл функции заключается в том, что она выслеживает пользователя, пока пользователь не введет натуральное число. Смысл функции плохой? Я говорю не о пользовательском интерфейсе (пользователь не может выйти из цикла без правильного ввода), а о циклическом вводе с обработанными исключениями.
- Вы сказали бы, что оператор throw (в данном случае) является неправильным использованием исключений? Я мог бы легко создать флаг для проверки правильности номера и вывести предупреждающее сообщение на основе этого флага. Но это добавит больше строк в код, и я думаю, что он отлично читается как есть.
Дело в том, что я часто пишу отдельную функцию ввода. Если пользователь должен ввести число несколько раз, я создаю отдельную функцию для ввода, которая обрабатывает все исключения и ограничения форматирования.