• Sábado 4 de Mayo de 2024, 14:52

Autor Tema:  ¿Parar ejecución o capturar el error?  (Leído 1744 veces)

jaumegs

  • Miembro MUY activo
  • ***
  • Mensajes: 110
    • Ver Perfil
¿Parar ejecución o capturar el error?
« en: Viernes 19 de Noviembre de 2010, 15:16 »
0
Una hipotética biblioteca C me ofrece una función para crear un objeto en memoria (no confundir con el término objeto de la POO). Esta función reserva la memoria necesaria para su propósito mediante otra biblioteca o una llamada al sistema; el mecanismo exacto no es importante. Si no consigue reservar la memoria a la primera lo intenta automáticamente unos milisegundos más tarde o simplemente espera a que haya memoria disponible (no está pensada para aplicaciones a tiempo real).

Supongamos que tras una llamada correcta (parámetros y contexto adecuados) no consigue reservar memoria.

¿Cuál debe ser la respuesta de dicha función? ¿Abortar la ejecución o devolver un código de error?

Mi razón me lleva a las siguientes conclusiones:

Si la tarea que está realizando el programa es crítica o no lo es pero tampoco tiene otras tareas que realizar, retornar un código de error no tiene demasiado sentido, pues el programa quedará paralizado. En este caso abortar la ejecución parece la opción más sensata.

Sin embargo, si la tarea no es crítica y hay otras por hacer, retornar un código de error permite al programa seguir con su trabajo e informar al usuario del suceso y darle la opción de recuperar el error.

Sea cual sea el caso, la función no tiene forma de conocerlo, así que abortar la ejecución puede ser una medida demasiado drástica.

Estoy confuso. Los nuevos lenguajes de programación y librerías tienden a incorporar mecanismos de captura y recuperación de errores, pero muchos programadores con experiencia son detractores de tales medidas.

Claro está que hay situaciones extremas que obligan a tomar una u otra opción sin discusión. Por ejemplo, el sistema de seguridad de una central nuclear no puede abortar la ejecución así por la buenas ni un sencillo programa tipo ls o dir necesita hacer filigranas si es incapaz de leer el sistema de archivos. Pero en el resto de situaciones no se que camino tomar.

¿Qué me recomiendan?

Gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: ¿Parar ejecución o capturar el error?
« Respuesta #1 en: Viernes 19 de Noviembre de 2010, 15:41 »
0
Cita de: "jaumegs"
¿Cuál debe ser la respuesta de dicha función? ¿Abortar la ejecución o devolver un código de error?
Siendo una librería (no biblioteca), debe devolver un código de error y dejar que la aplicación decida qué hacer. Es decir, el rol de una librería es ofrecer servicios, no controlar el flujo de ejecución de la aplicación o decidir por ella. En todo caso podría tomar un argumento que indique su comportamiento, pero es superfluo ya que eso lo puede decidir la aplicación.

jaumegs

  • Miembro MUY activo
  • ***
  • Mensajes: 110
    • Ver Perfil
Re: ¿Parar ejecución o capturar el error?
« Respuesta #2 en: Viernes 19 de Noviembre de 2010, 16:11 »
0
Cita de: "m0skit0"
el rol de una librería es ofrecer servicios, no controlar el flujo de ejecución de la aplicación o decidir por ella
Me parece un buen argumento. Gracias por la respuesta.

Ahora supongamos que la llamada a la función no se realiza con los parámetros o en el contexto adecuado, es decir, el programador comete un error en su uso.

Devolver un código de error puede enmascarar el error, pues si es el programador el que lo comete lo más probable es que no añada la capacidad al programa para detectarlo y el error se extienda hasta que el sistema operativo o el usuario detenga la ejecución.

En este caso, a mi entender, abortar la ejecución e indicar dónde se ha producido el error es la mejor opción, pues permite detectarlo y corregirlo.

¿Mis razonamientos son correctos o me equivoco? ¿Alguna otra sugerencia?

Respecto a la corrección "librería, no biblioteca" digo en mi defensa que la traducción de library, palabra inglesa de donde procede, puede ser cualquiera de las dos.

Según el DRAE.

biblioteca.
(Del lat. bibliothēca, y este del gr. βιβλιοθήκη).
1. f. Institución cuya finalidad consiste en la adquisición, conservación, estudio y exposición de libros y documentos.
2. f. Local donde se tiene considerable número de libros ordenados para la lectura.
3. f. Mueble, estantería, etc., donde se colocan libros.
4. f. Conjunto de estos libros.
[...]

librería.
1. f. biblioteca (‖ local en que se tienen libros).
2. f. biblioteca (‖ conjunto de estos libros).
3. f. Tienda donde se venden libros.
4. f. Ejercicio o profesión de librero.
5. f. Mueble con estantes para colocar libros.
6. f. Am. papelería (‖ tienda).

Las dos palabras pueden actuar como sinónimos, sin embargo, biblioteca siempre significa "colección de libros", pero libería puede significar "local de venta de libros".

A mi entender la dos palabras son igual de adecuadas.

Gracias.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: ¿Parar ejecución o capturar el error?
« Respuesta #3 en: Viernes 19 de Noviembre de 2010, 17:45 »
0
Coincido con m0skit0.

A mi parecer una libreria nunca deberia abortar.

Lo ideal es usar un gestor de errores.

Si el programador no controla los errores, entonces es problema de el, no de la libreria.

Saludos
The sweet smell of a great sorrow lies over the land.


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: ¿Parar ejecución o capturar el error?
« Respuesta #4 en: Viernes 19 de Noviembre de 2010, 19:01 »
0
Cita de: "Epa"
Si el programador no controla los errores, entonces es problema de el, no de la libreria.
En ese caso es pésimo programador.

Cita de: "jaumegs"
A mi entender la dos palabras son igual de adecuadas.
De hecho, tienes razón tú: http://es.wikipedia.org/wiki/Librer%C3% ... %C3%B3n%29. Librería es erróneo. Mis disculpas.