error-handling smalltalk

error handling - manejo de errores smalltalk



error-handling (3)

Solo quiero señalar que junto al camino @Frank Shearar menciona que hay otra posibilidad. Quiero decir por diseño. En algún momento es más útil dejar que la persona que llama ahora qué problema está pasando.

El #on:do: es perfectamente aceptable, pero la mayoría de las veces no sabes qué poner como primer argumento. block on: ?? do: something block on: ?? do: something .

Déjame un ejemplo. En realidad, hay un ejemplo de la biblioteca de Colección. Especialmente con respecto al diccionario.

aDict at: 4

Aquí lo que sucede si 4 no está en el diccionario. Acaba de obtener un error simple que necesita capturar en un #on:do:

Pero hay una mejor manera de manejar esta situación:

aDict at: 4 ifAbsent: [^#noSuchThingAs4]

Usted maneja el error igual que el #on:do: pero ahora sabe por qué. Entonces podrías hacer eso en otro para manejar tu error correctamente.

aConnection connectIfFailed: [ ^#maybeRetryHere ]

Tenga en cuenta que debe colocar el código de excepción en un bloque para que no se evalúe hasta que ocurra el error.

aDict at: 4 ifAbsentPut: self default

puede funcionar, pero está mal. Espero que te ayuden

He leído algunas introducciones de principiante a smalltalk y hay un tema que falta. Es manejo de errores. ¿Cómo se hace? ¿Los objetos arrojan algún tipo de excepciones? ¿Enviar algunos mensajes de error a alguien?


Para presentar una excepción:

MyException signal. MyException signal: ''With an error message''.

Para manejar una excepción:

[ 1 / 0 ] on: ZeroDivide do: [ Transcript showln: ''Oops! Zero divide!''].

Para manejar una excepción y usar parte de la información de la excepción:

[ 1 / 0 ] on: Error do: [:e | Transcript showln: ''Oops! '' , e className , ''!''].

Para asegurarse de que siempre suceda algo (a la try finally ):

[ 1 / 0 ] ensure: [ Transcript showln: ''This will always run'' ]