Buenas noches.
Quisiera saber si es correcto lanzar una excepción en smalltalk empleando un IF; es decir:
( x < 0 ) ifTrue: [ NumeroNegativoError signal. ].
¿O existe otra forma de lanzar una excepción?
Muchas gracias.
Saludos.
Hola José Luis:
Lo que proponés es correcto. Ahora bien, el dilema es determinar si es conveniente, lo cual es algo que dependerá del contexto y de qué represente el lanzamiento de la excepción en cuestión.
Para que una parte de tu modelo lance una excepción se requiere que previamente hayas establecido sus invariantes (en particular las precondiciones) y que, idealmente, queden documentadas en pruebas unitarias. En el ejemplo que mostrás parece que el objeto x no puede ser menor a cero, por lo que la única manera de evaluar esa precondición es a través de una estructura de control tal como hiciste. El tema es ver qué clase se encargará de tener ese if y lanzar la excepción y que el nombre de la excepción sea más descriptivo.
¿O existe otra forma de lanzar una excepción?
El lanzamiento de la excepción en sí se realiza mediante el mensaje signal, de manera tal que no hace falta un if para lanzar una excepción. El if lo usás de acuerdo a tu necesidad, pero podrías lanzarla simplemente si se llega a cierto punto o cualquier otra situación que quede determinada por tus invariantes.
Saludos,
Tomás