Apakah praktik yang baik untuk menggunakan NoStackTrace di scala?


11

Saya menemukan NoStackTracemixin untuk Pengecualian dalam scala.

Apakah praktik yang baik untuk menggunakannya, atau haruskah dianggap "internal" untuk scala dan dibiarkan sendiri?

Jawaban:


14

Untuk sesaat, mari menuju ke Stack Overflow - Seberapa lambat pengecualian Java?

Ternyata bagian mahal dari melempar pengecualian adalah populasi jejak tumpukan yang sesuai dengan pengecualian.

Jejak tumpukan ini sangat membantu ketika debugging masalah untuk mencoba mencari tahu dari mana hal-hal dipanggil Salah satu pertanyaan standar yang diajukan tentang masalah adalah "apa kode" dan "apa jejak tumpukan". Tanpa kedua hal itu, mendiagnosis masalah hampir tidak mungkin.

Namun, tidak semua pengecualian dihasilkan oleh masalah . Beberapa dari mereka, Anda hampir berharap.

Pertimbangkan situasi bahwa Anda mendapatkan sebuah String dari beberapa sumber dan Anda ingin mendapatkannya kembali ke dalam format integer dengan Integer.decode .

Integer foo = Integer.decode(str);

Tapi itu decodemelempar diperiksa NumberFormatException. Baik...

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

Tapi Anda benar-benar tidak peduli tentang jejak tumpukan di sana ... tetapi ada di sana. Dan sedikit lebih lambat karena mengisi jejak stack.

Jadi, di Scala, Anda punya NoStackTrace:

Sifat pengecualian yang, karena alasan efisiensi, tidak mengisi jejak tumpukan. Penumpukan jejak tumpukan dapat dinonaktifkan secara global melalui pembungkus properti sistem di scala.sys.SystemProperties.

Jangan mengisi apa yang tidak Anda butuhkan. Anda tidak peduli tentang jejak tumpukan karena Anda menangani itu di sana dan kemudian. Ini bukan sesuatu yang dilewatkan, dan itu tidak terlalu luar biasa baik.

Ini bukan praktik buruk untuk menggunakannya ketika Anda tahu apa yang Anda tangani. Tetapi, jika Anda meneruskan ini pada rantai - jangan gunakan itu - Anda mungkin hanya perlu login di mana beberapa pengecualian berasal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.