¿Es una buena práctica usar NoStackTrace en scala?

11

Encontré el NoStackTracemixin para Excepciones en scala.

¿Es una buena práctica usarlo, o debería considerarse "interno" para escalar y dejarlo solo?

Daenyth
fuente

Respuestas:

14

Por un momento, vamos a Desbordamiento de pila: ¿qué tan lentas son las excepciones de Java?

Resulta que la parte costosa de lanzar excepciones es la población del seguimiento de la pila que acompaña a la excepción.

Este seguimiento de la pila es muy útil cuando se depuran problemas para tratar de averiguar de dónde se llaman las cosas. Una de las preguntas estándar sobre problemas es "cuál es el código" y "cuál es el seguimiento de la pila". Sin esas dos cosas, diagnosticar un problema es casi imposible.

Sin embargo, no todas las excepciones son generadas por problemas . Algunos de ellos, casi lo esperas.

Considere la situación en la que tiene una Cadena de alguna fuente y desea volverla a un formato entero con Integer.decode .

Integer foo = Integer.decode(str);

Pero eso decodearroja un cheque NumberFormatException. Okay...

Integer foo;
try {
    foo = Integer.decode(str);
} catch (NumberFromatException e) {
    // raise an error back to the input form
}

Pero realmente no te importa el rastro de la pila allí ... pero está ahí. Y solo un poco más lento porque llenó la traza de la pila.

Por lo tanto, en Scala, tienes el NoStackTrace:

Un rasgo para excepciones que, por razones de eficiencia, no completan el seguimiento de la pila. La supresión de seguimiento de pila se puede deshabilitar globalmente mediante un contenedor de propiedades del sistema en scala.sys.SystemProperties.

No llenes lo que no necesitas. No le importa el seguimiento de la pila porque lo está manejando allí mismo. Esto no es algo que se esté pasando por alto, y tampoco es tan excepcional.

No es una mala práctica usarlo cuando sabes lo que estás manejando. Pero, si está pasando esto por la cadena, no lo use, es posible que solo necesite registrar de dónde provino alguna excepción.

Comunidad
fuente