Я написав функцію, яка запитує у користувача введення, поки користувач не введе додатне ціле число (натуральне число). Хтось сказав, що я не повинен кидати і виловлювати винятки у своїй функції, а дозволити абоненту моєї функції керувати ними.
Цікаво, що думають з цього приводу інші розробники. Я також, мабуть, зловживаю винятками у функції. Ось код на 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;
}
Мене цікавлять дві речі:
- Чи варто дозволити абоненту перейматися винятками? Сенс функції полягає в тому, що він нудить користувача, поки користувач не введе натуральне число. Чи поганий пункт функції? Я не говорю про інтерфейс користувача (користувач не може вийти з циклу без належного введення), а про циклічне введення з обробкою винятків.
- Ви б сказали, що заява про кидок (у даному випадку) - це неправильне використання винятків? Я міг легко створити прапор для перевірки дійсності номера та вивести попереджувальне повідомлення на основі цього прапора. Але це додало б більше рядків до коду, і я думаю, що це ідеально читабельно, як є.
Річ у тому, що я часто пишу окрему функцію введення. Якщо користувачеві доводиться вводити число кілька разів, я створюю окрему функцію для введення, яка обробляє всі винятки та обмеження форматування.