ScalaでNoStackTraceを使用するのは良い習慣ですか?


11

NoStackTraceScalaでExceptions のmixin に出会いました。

それを使用するのは良い習慣ですか、それともscalaの「内部」と見なされ、放置されるべきですか?

回答:


14

しばらくの間、Stack Overflowに向かいましょう-Java例外はどれくらい遅いですか?

例外をスローすることの高価な部分は、例外に伴うスタックトレースの生成であることがわかります。

このスタックトレースは、問題をデバッグするときに、どこから呼び出されているのかを把握するのに非常に役立ちます。問題について尋ねられる標準的な質問の1つは、「コードとは」と「スタックトレースとは」です。これらの2つのことがなければ、問題の診断はほとんど不可能です。

ただし、すべての例外が問題によって生成されるわけではありません。それらのいくつか、あなたはほとんど期待しています。

何らかのソースから文字列を取得し、それをInteger.decodeで整数形式に戻したい状況を考えてください。

Integer foo = Integer.decode(str);

しかし、それdecodeはチェックをスローしますNumberFormatException。OK...

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

しかし、あなたは本当にスタックトレースを気にしません...しかし、そこにあります。また、スタックトレースが読み込まれるため、少し遅くなります。

したがって、Scalaには次のものがありNoStackTraceます。

効率上の理由から、スタックトレースを満たさない例外の特性。スタックトレースの抑制は、scala.sys.SystemPropertiesのシステムプロパティラッパーを介してグローバルに無効にできます。

不要なものを入力しないでください。スタックトレースはその場で処理するため、気にしません。これは見過ごされているものではなく、例外的でもありません。

あなたが何を扱っているかを知っているとき、それを使用することは悪い習慣ではありません。ただし、これをチェーンで渡す場合は、使用しないでください。例外が発生した場所をログに記録するだけでよい場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.