Обработка ошибок с типом TRY

Появился в Scala 2.10.0 и был портирован в Scala 2.9.3.

Как и в других языках Scala позволяет производить выбрасывание исключений:

 

Выброшенные исключения могут быть отловлены и обработаны с помощью блоков Try/Catch содержащих частично применяемые функции, которые указывают на типы, исключений, которые мы хотим обработать. Кроме того, в scala блок Try/Catch – это выражение которое может иметь результат.

Например, так:

 

Обработка ошибок функциональным способом

Обработка ошибок классическим способом плохо сочетается с функциональным программированием, такой подход также очень плохо сочетается с параллелизмом. Например, в системе Акторов, если исключение происходит в другом акторе, то это означает, что Вы не можете поймать это исключение, так как оно находиться в другом потоке выполнения, но информация об ошибке не должна теряться.

Для решения таких задач в Scala предусмотрена возможность возвращать значение соответствующе ошибке из функций. Это достигается применением типа Try включенного в состав Scala. Кроме того, существует более обобщенный тип Either.

подробнее

Опциональный тип Option

Иногда при работе с Java возникает NullPointerException, это происходит потому, что некоторые методы могут возвращать null, а не ожидаемое вами значение и такое поведение не проверяется в использующем такую функцию коде. Значение null часто используется для представления отсутствующего значения.

При этом подобные концепции встречаться и в других языках, более того некоторые языки (например: Groovy) имеют встроенную поддержку конструкций для работы с такими значениями.

Scala пошла другим путем и создала свой тип для представления того, что значение может быть или его может не быть это трейт Option[A].

Option[A] – это контейнер для значения типа A, при этом если значение присутствует, то Option[A] – это экземпляр Some[A] содержащий значение типа A . Если значение отсутствует то Option[A] – это объект None.

Такой подход обязует всех разработчиков использующих док учитывать такую природу значений в своем коде, при этом работа с таким типом контролируется компилятором, что делает невозможным не правильную трактовку значений.

подробнее