Комментарии 17
Включить можно, но для практики это скорее всего ничего не даст. Вы можете свое исключение таким создать, но попробуйте для чужих проделать эту операцию. То есть, если вы ловите условный IOException, то стек за вас уже заполнили, и какое-то время потрачено.
Это даст реальное сравнение в данном контексте, а так тут сравнивается две группы вариантов: со эксепшенами (с получением стека) и без них. Вторые конечно стали победителями.
А если в первой группе не вычитывать стэк, то победитель станет уже и не так очевиден.
Если же рассматривать условный вариант с IOException
, то тут тоже не будет профита относительно второго варианта, так как эксепшн у вас уже всё равно есть.
Конечно качественно мы имеем две категории — исключения и АТД, но поскольку таких типов в Scala несколько интересно не только сравнить эти две категории, но и несколько разных подходов к обработке ошибок с помощью АТД.
Исключения без трейса это интересный кандидат, пожалуй добавлю его к сравнению.
Это вы про Java 8? :)
В Java к сожалению ADT почти не используются и даже стандартный Optional не рекомендуется использовать в интерфейсах и передавать между методами.
Я это лично делал уже в трех проектах.
Я не говорю про библиотеки, с ними можно все, стандартная библиотека ни в Java 8 ни в Java 11 не поощряет такой подход
Ну, не совсем. До Java 8 как раз кое-что было нельзя (практически совсем). Лямбды дали возможность сделать Try.of(()->«вычисления»), и вычисления эти стали внезапно ленивыми. Потому что это всего-лишь параметр для метода, и раньше он вычислялся до вызова — теперь тоже, но теперь это функция.
И это пожалуй то самое изменение, которое и делает все это в целом возможным и осмысленным. Во всяком случае до Java 8 я таких библиотек припомнить не могу (хотя Either были уже лет 10 назад, сразу с выходом Java 5).
final case class Failure[+T](exception: Throwable) extends Try[T] {...}
Т.е. при использовании Try исключение равно создаётся, соответственно, и стек-трейс будет заполнять. Нужен ещё один вариант: исключение без заполнения стек-трейса вместе с Try. :)
Подпишите, пожалуйста оси. Очень сложно понять что на графиках.
Как обрабатывать ошибки на JVM быстрее