2011-01-28 18 views
11

Estoy viendo Three Cool Things About D - The Case for the D Programing Language y básicamente dice no usar try/catch/finally (sobre la marca 38. 39:30 dice que no quiere ver la try/catch que genera), es mucho mejor usar scope (failure) (también hay salida y éxito).¿Alternativa para atrapar en D?

Mi pregunta es qué sucede cuando quiere verificar la excepción y realizar una acción basada en la excepción como alertar al usuario que el disco no tiene espacio o marcar una url como 404 (.NET webclient/webrequest lanza esto) o vuelva a intentar más tarde si se produce un código de error 500. ¿Cómo haría esto? ¿Debo usar try/catch o hay otra forma?

Respuesta

16

scope Las instrucciones le permiten ejecutar el código al salir del ámbito en el que las declara. scope(success) se ejecuta al salir normalmente del alcance. scope(failure) se ejecuta al salir del ámbito debido a una excepción que se lanza. scope(exit) se ejecuta al salir del alcance independientemente de cómo salga del alcance. Ninguno de ellos le da acceso a excepciones lanzadas. Simplemente le permiten ejecutar código al salir del alcance actual en función de cómo salga de ese alcance.

Así que, esencialmente, en los casos en que atraparía una excepción, hacer algo, y luego tirar de nuevo sin preocuparse de lo que en realidad era la excepción, scope(failure) se puede utilizar en lugar de catch, y scope(exit) se puede utilizar en lugar de finally. Sin embargo, si realmente necesita la excepción, entonces tendrá que atraparla usando un bloque try - catch. scope simplemente no le da acceso a la excepción, por lo que no puede usar una declaración scope si realmente desea hacer algo con una excepción que se lanzó. Sin embargo, scope funciona muy bien cuando no te importa cuál fue la excepción en realidad.

+0

Eso es lo que pensaba. Solo preguntaba para asegurarme de que no me faltaba nada. Es bueno escuchar +1 y aceptado –

1

scope no reemplaza catch. Debe usar catch cuando realmente maneje (o recupere) la excepción. Si desea limpiar durante el desenrollado de la pila, prefiera utilizar scope o a veces finally. De esta forma obtendrás un código mucho más limpio y fácil de mantener.