Scala'da NoStackTrace kullanmak iyi bir uygulama mı?


11

NoStackTraceSkala'daki İstisnalar için mixin ile karşılaştım .

Kullanmak iyi bir uygulama mıdır yoksa skalaya “yalnız” mı bırakılmalı ve yalnız bırakılmalıdır mı?

Yanıtlar:


14

Bir an için Stack Overflow - Java istisnaları ne kadar yavaş?

İstisnaları atmanın pahalı kısmının, istisna ile birlikte giden yığın izinin popülasyonu olduğu ortaya çıkıyor.

Bu yığın izlemesi, hata ayıklama sırasında, işlerin nereden çağrıldığını anlamaya çalışmak için çok yararlıdır. Sorunlardan sorulan standart sorulardan biri "kod nedir" ve "yığın izlemesi" dir. Bu iki şey olmadan, bir sorunu teşhis etmek neredeyse imkansızdır.

Ancak, tüm istisnalar sorunlardan kaynaklanmaz . Bazıları, neredeyse beklersiniz.

Bazı kaynaklardan bir String aldığınız ve Integer.decode ile bir tamsayı biçimine geri döndürmek istediğiniz durumu düşünün .

Integer foo = Integer.decode(str);

Ama bu decodebir kontrol atar NumberFormatException. Tamam...

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

Ama oradaki yığın izini gerçekten umursamıyorsun ... ama orada. Ve sadece biraz daha yavaş çünkü yığın izini doldurdu.

Böylece, Scala'da NoStackTrace:

Verimlilik nedeniyle yığın izini doldurmayan istisnalar için bir özellik. Yığın izleme bastırma, scala.sys.SystemProperties dosyasındaki bir sistem özellik sarmalayıcısı aracılığıyla genel olarak devre dışı bırakılabilir.

İhtiyacınız olmayanları doldurmayın. Yığın izini umursamazsınız çünkü orada ve sonra işliyoruz. Bu, geçmekte olan bir şey değildir ve o kadar da olağanüstü değildir.

Ne kullandığınızı bildiğinizde kullanmak fena değil. Ancak, bunu zincirden geçiriyorsanız - kullanmayın - bazı istisnaların geldiği yeri günlüğe kaydetmeniz gerekebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.