Как программист Java, я всегда критиковал Unchecked Exceptions. В основном программисты используют его как средство для легкого кодирования, чтобы потом создавать проблемы. Кроме того, программы (хотя и неопрятные) с проверенными исключениями намного надежнее по сравнению с непроверенными аналогами.
Удивительно, но в Scala нет ничего, что называется Проверенные исключения. Все проверенные и не проверенные Java не проверяются в Scala.
Какова мотивация этого решения? Для меня это открывает широкий спектр проблем при использовании любого внешнего кода. И если случайно документация плохая, это приводит к УБИЙСТВУ.
Ответы:
Проверенные исключения чаще всего считаются неудачными. Обратите внимание, что ни один из языков, созданных после Java, не принял их. См. Http://www.artima.com/intv/handcuffs2.html , http://googletesting.blogspot.ru/2009/09/checked-exceptions-i-love-you-but-you.html , http: / /www.mindview.net/Etc/Discussions/CheckedExceptions и т. д.
В частности, они неразложимы (кроме как путем возврата
throws Exception
).В Scala у вас есть лучший вариант: с помощью алгебраических типов для возвращаемых значений , таких как
Option[T]
,Either[Exception, T]
, ваш собственный тип , если вы хотите, чтобы пользователь на конкретные случаи ручки (например , вместоу тебя есть
и потребитель теперь обязан обрабатывать все результаты)
Для работы с внешним кодом, который выдает исключения, у вас есть
scala.util.control.exception
илиscala.util.Try
(начиная с Scala 2.10).источник
try..catch
кажется, гораздо более читабельным, чемif
. Более того, я также могу гарантировать, что те же самые разработчики не собираются писать код, который возвращает результат ошибки - слишком сложный в Scala - вы даже не можете вернуться из функции, когда захотите (как в Pascal)Проверенные исключения в Java не так уж плохи. Конечно, ADT могут быть лучшим вариантом для Scala, но в Java проверенные исключения имеют свое место, и аргумент аккуратного кода является просто бессмысленным бессмысленным, независимо от того, сколько блогов повторялось это. В основном это говорит о том, что вы должны с радостью игнорировать серьезные и, возможно, исправимые условия, которые могут возникнуть в вашей системе, потому что система винтового типа, красивый код делает вашу систему автоматически надежной. Такое рассуждение также объясняет, почему так много Java-кодеров добровольно переносят свой код в XML (Spring, Maven и т. Д. Я скучаю по хорошему Хотя здесь часть).
Причина отсутствия проверенных исключений в Scala, приведенная М. Одерским ниже http://www.scala-lang.org/old/node/8787.html , неудивительно отличается и имеет смысл.
Не уверен, но я думаю, что лямбды Java 8 также ограничены непроверенными исключениями.Методы в большинстве (всех?) Новых функциональных интерфейсов в JDK 8 (java.util.function.*
) также не объявляют непроверенные исключения.источник
Если вы хотите повысить эффективность, вы должны отказаться от… точности / контроля <- мне нужно более подходящее слово для этого.
Скала расположена к вершине, насколько абстракция идет. Если одной из целей Scala является избавление от надоедливого стандартного кода, то очевидным местом для рассмотрения является обработка исключений в Java. Если вы хотите написать быстрый код на языке Java, просто продолжайте бросать проверенные исключения, пока они не сработают
main()
и не станут фактически непроверенными.Я не знаю, правильно ли я понимаю, что вы спрашиваете, но это самая очевидная причина, по моему мнению.
Ну, я немного посмотрел, и кто-то написал о трагедии проверки исключений .
источник