Có nên sử dụng NoStackTrace trong scala không?


11

Tôi đã xem qua NoStackTracemixin cho Ngoại lệ trong scala.

Nó là một thực hành tốt để sử dụng nó, hay nó nên được coi là "nội bộ" đối với scala và để lại một mình?

Câu trả lời:


14

Trong một lúc, hãy đi qua Stack Overflow - Các ngoại lệ Java chậm đến mức nào?

Nó chỉ ra rằng phần đắt tiền của việc ném ngoại lệ là dân số của dấu vết ngăn xếp đi kèm với ngoại lệ.

Theo dõi ngăn xếp này rất hữu ích khi gỡ lỗi các vấn đề để cố gắng tìm ra nơi mà mọi thứ được gọi từ đâu. Một trong những câu hỏi tiêu chuẩn được hỏi về các vấn đề là "mã là gì" và "dấu vết ngăn xếp là gì". Không có hai điều đó, việc chẩn đoán một vấn đề là không thể.

Tuy nhiên, không phải tất cả các ngoại lệ được tạo ra bởi các vấn đề . Một số trong số họ, bạn gần như mong đợi.

Hãy xem xét tình huống bạn đã có một Chuỗi từ một số nguồn và bạn muốn đưa nó trở lại định dạng số nguyên với Integer.decode .

Integer foo = Integer.decode(str);

Nhưng điều đó decodeném một kiểm tra NumberFormatException. Đồng ý...

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

Nhưng bạn thực sự không quan tâm đến dấu vết ngăn xếp ở đó ... nhưng nó ở đó. Và chỉ chậm hơn một chút vì nó điền vào dấu vết ngăn xếp.

Do đó, ở Scala, bạn đã có NoStackTrace:

Một đặc điểm cho các trường hợp ngoại lệ, vì lý do hiệu quả, không điền vào dấu vết ngăn xếp. Ngăn chặn theo dõi ngăn xếp có thể bị vô hiệu hóa trên cơ sở toàn cầu thông qua trình bao bọc thuộc tính hệ thống trong scala.sys.SystemProperIES.

Đừng điền vào những gì bạn không cần. Bạn không quan tâm đến dấu vết ngăn xếp bởi vì bạn đang xử lý nó ngay tại đó và sau đó. Đây không phải là một cái gì đó đang được thông qua, và nó cũng không phải là tất cả.

Nó không phải là thực hành xấu để sử dụng nó khi bạn biết những gì bạn đang xử lý. Nhưng, nếu bạn chuyển cái này lên chuỗi - không sử dụng nó - bạn có thể chỉ cần đăng nhập nơi có một ngoại lệ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.