Guía del usuario de Ruby - Procesamiento de excepciones: ensure
Tutorial creado por matz. Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-guia-usuario-ruby/doc-guia-usuario-ruby-html/
27 de Febrero de 2006
Orientación a objetos
27 - Procesamiento de excepciones: ensure
Cuando un método termina su ejecución puede que se necesiten ciertas labores de limpieza. Quizás se tenga que cerrar un fichero abierto, se deban liberar los datos de los buffers, etc. Si siempre hubiese un único punto de salida para cada método, se podría poner con seguridad todo el código de limpieza en un lugar concreto y saber que se ejecutará, sin embargo, un método podría retornar en varios lugares o el código de limpieza podría saltarse inesperadamente debido a una excepción.
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... file.close end ||
En el ejemplo superior, si ocurre una excepción durante la parte del código en que se escribe en el fichero, éste quedará abierto. Si no deseamos recurrir al siguiente tipo de redundancia:
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... file.close rescue file.close fail # levantamos una excepción end ||
Que es desgarbada y se nos escapa de las manos cuando el código se vuelve más complicado debido a que hay que tratar todo return y break.
Por esta razón se añadió otra palabra reservada a esquema begin ... rescue ... end, ensure. El bloque de código de ensure se ejecuta independientemente del éxito o fracaso del bloque de código en begin.
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... rescue # ... gestionamos las excepciones ... ensure file.close # ... Y esto se ejecuta siempre. end ||
Se puede utilizar ensure sin rescue y viceversa, pero si se utilizan en el mismo bloque begin ... end, rescue debe preceder a ensure.
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... file.close end ||
En el ejemplo superior, si ocurre una excepción durante la parte del código en que se escribe en el fichero, éste quedará abierto. Si no deseamos recurrir al siguiente tipo de redundancia:
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... file.close rescue file.close fail # levantamos una excepción end ||
Que es desgarbada y se nos escapa de las manos cuando el código se vuelve más complicado debido a que hay que tratar todo return y break.
Por esta razón se añadió otra palabra reservada a esquema begin ... rescue ... end, ensure. El bloque de código de ensure se ejecuta independientemente del éxito o fracaso del bloque de código en begin.
|| begin file = open("/tmp/algun_fichero","w") # ... Escribimos en el fichero ... rescue # ... gestionamos las excepciones ... ensure file.close # ... Y esto se ejecuta siempre. end ||
Se puede utilizar ensure sin rescue y viceversa, pero si se utilizan en el mismo bloque begin ... end, rescue debe preceder a ensure.
Valora este capítulo:
Autor y licencia de 'Guía del usuario de Ruby - Procesamiento de excepciones: ensure'
|
Opiniona sobre 'Guía del usuario de Ruby - Procesamiento de excepciones: ensure' (2)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Guía del usuario de Ruby - Procesamiento de excepciones: ensure'
Este controlador es para la interfaz del adaptador Ethernet Digital ''Tulip'' Debería de trabajar con...
Más »
Todo lo que Ud. necesita saber para comenzar a utilizar Linux, el clon gratuito de...
Más »
Los sistemas de información de consultoría han sido vistos como una opción muy atractiva para...
Más »
Los textos científicos tienen ciertas particularidades que fuerzan el uso de herramientas especializadas. LaTeX es...
Más »
Este tema no debe dejarse nunca de lado; todos conocemos ejemplos de sitios que ahuyentan...
Más »

