Tôi đã viết một hàm yêu cầu người dùng nhập liệu cho đến khi người dùng nhập số nguyên dương (số tự nhiên). Ai đó nói rằng tôi không nên ném và bắt ngoại lệ trong chức năng của mình và nên để người gọi chức năng của tôi xử lý chúng.
Tôi tự hỏi những nhà phát triển khác nghĩ gì về điều này. Tôi cũng có thể lạm dụng các ngoại lệ trong chức năng. Đây là mã trong 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;
}
Tôi quan tâm đến hai điều:
- Tôi có nên để người gọi lo lắng về ngoại lệ? Điểm của chức năng là nó cằn nhằn người dùng cho đến khi người dùng nhập số tự nhiên. Là điểm của chức năng xấu? Tôi không nói về UI (người dùng không thể thoát khỏi vòng lặp mà không có đầu vào thích hợp), nhưng về đầu vào bị lặp với các ngoại lệ được xử lý.
- Bạn có thể nói tuyên bố ném (trong trường hợp này) là lạm dụng các ngoại lệ? Tôi có thể dễ dàng tạo một cờ để kiểm tra tính hợp lệ của số và xuất thông báo cảnh báo dựa trên cờ đó. Nhưng điều đó sẽ thêm nhiều dòng vào mã và tôi nghĩ nó hoàn toàn có thể đọc được.
Có điều là tôi thường viết một hàm đầu vào riêng biệt. Nếu người dùng phải nhập một số nhiều lần, tôi tạo một hàm riêng cho đầu vào xử lý tất cả các ngoại lệ và giới hạn định dạng.