스칼라에서 NoStackTrace를 사용하는 것이 좋습니다? 사용하는 것이 좋은 습관입니까,

NoStackTrace스칼라의 예외에 대한 믹스 인을 보았습니다.

그것을 사용하는 것이 좋은 습관입니까, 아니면 스칼라에 “내부”로 간주되어 혼자 남겨 져야합니까?



답변

잠시 동안 스택 오버플로로 넘어가십시오. Java 예외는 얼마나 느립니까?

예외를 던지는 데 가장 많은 비용이 드는 부분은 예외와 함께 발생하는 스택 추적의 인구 집단입니다.

이 스택 추적은 문제를 디버깅 할 때 문제가 발생하는 위치를 파악하려고 할 때 매우 유용합니다. 문제에 대한 표준 질문 중 하나는 “코드는 무엇입니까”와 “스택 추적은 무엇입니까”입니다. 이 두 가지가 없으면 문제를 진단하는 것이 거의 불가능합니다.

그러나 모든 예외가 문제에 의해 생성되는 것은 아닙니다 . 그들 중 일부는 거의 기대합니다.

어떤 소스에서 String을 얻었고 Integer.decode 를 사용하여 정수 형식으로 다시 가져 오려는 상황을 고려하십시오 .

Integer foo = Integer.decode(str);

그러나 그것은 decode확인 을 던졌습니다 NumberFormatException. 확인…

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

그러나 실제로 스택 추적에 신경 쓰지 않지만 거기에 있습니다. 스택 트레이스를 채웠기 때문에 조금 느리게 느립니다.

따라서 스칼라에는 다음이 있습니다 NoStackTrace.

효율성상의 이유로 스택 추적을 채우지 않는 예외에 대한 특성. scala.sys.SystemProperties의 시스템 속성 래퍼를 통해 전역 적으로 스택 추적 억제를 비활성화 할 수 있습니다.

필요없는 것을 채우지 마십시오. 스택 트레이스를 처리하기 때문에 스택 트레이스에 신경 쓰지 않아도됩니다. 이것은 지나가는 것이 아니며 그다지 뛰어난 것은 아닙니다.

당신이 취급하는 것을 알 때 그것을 사용하는 것은 나쁜 습관이 아닙니다. 그러나 체인에 이것을 전달하는 경우 사용하지 마십시오. 예외가 발생한 위치를 기록하면됩니다.