Gần đây tôi đã tự dạy Python và phát hiện thành phần LBYL/EAFP liên quan đến kiểm tra lỗi trước khi thực thi mã. Trong Python, có vẻ như phong cách được chấp nhận là EAFP, và nó có vẻ hoạt động tốt với ngôn ngữ.LBYL vs EAFP trong Java?
LBYL (L ook B efore Y ou L eap):
def safe_divide_1(x, y):
if y == 0:
print "Divide-by-0 attempt detected"
return None
else:
return x/y
EAFP (nó E Asier để Một sk F orgiveness hơn P ermission):
def safe_divide_2(x, y):
try:
return x/y
except ZeroDivisionError:
print "Divide-by-0 attempt detected"
return None
Câu hỏi của tôi là thế này: tôi đã thậm chí không bao giờ nghe nói về sử dụng EAFP như xây dựng xác nhận dữ liệu tiểu học, đến từ một nền tảng Java và C++. EAFP là một cái gì đó là khôn ngoan để sử dụng trong Java? Hoặc có quá nhiều chi phí từ trường hợp ngoại lệ? Tôi biết rằng chỉ có chi phí khi một ngoại lệ thực sự bị ném, vì vậy tôi không chắc chắn là tại sao phương pháp EAFP đơn giản hơn không được sử dụng. Nó chỉ là sở thích?
Loại EAFP này phụ thuộc một phần vào việc các trường hợp ngoại lệ bạn kiểm tra có xảy ra thường xuyên hay không. Nếu họ không chắc, thì EAFP là hợp lý. Nếu chúng là phổ biến, thì LBYL có thể tốt hơn. Câu trả lời có lẽ cũng phụ thuộc vào mô hình xử lý ngoại lệ có sẵn. Trong C, LBYL là cần thiết. –
Tôi đồng ý với Jonathan. Trong Python, EAFP là một cách tốt để đi. – Jeff
"ngoại lệ chung" không phải là ngoại lệ, vì vậy tất nhiên LBYL sẽ được ưu tiên hơn trong trường hợp đó, bạn có nghĩ vậy không? –