Hace poco estuve enseñando Python y descubrí las expresiones idiomáticas LBYL/EAFP con respecto a la comprobación de errores antes de la ejecución del código. En Python, parece que el estilo aceptado es EAFP, y parece funcionar bien con el lenguaje.LBYL vs EAFP en Java?
LBYL (L ook B ntes 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 (es E asier a A sk F orgiveness que P error):
def safe_divide_2(x, y):
try:
return x/y
except ZeroDivisionError:
print "Divide-by-0 attempt detected"
return None
Mi pregunta es la siguiente: Yo nunca habían oído hablar de la utilización de EAFP como la construcción de la validación de datos principal, que viene de un fondo de Java y C++. ¿Es EAFP algo que es aconsejable usar en Java? ¿O hay demasiada sobrecarga de excepciones? Sé que solo hay gastos generales cuando se lanza una excepción, por lo que no estoy seguro de por qué no se usa el método más simple de EAFP. ¿Es solo preferencia?
Este tipo de EAFP depende en parte de si las excepciones que evalúa van a ocurrir muy a menudo. Si no son probables, entonces EAFP es razonable. Si son comunes, entonces LBYL puede ser mejor. La respuesta probablemente también dependa del paradigma de manejo de excepciones disponible. En C, LBYL es necesario. –
Estoy de acuerdo con Jonathan. En Python, EAFP es una buena forma de hacerlo. – Jeff
una "excepción común" no es una excepción, por lo que LBYL será preferido en ese caso, ¿no crees? –