В моем коде scala (библиотеках, а также приложениях) я в настоящее время использую смесь Option
и Try
, когда каждый из них кажется более подходящим.
Я стремлюсь реализовать методы "doSomething", которые могут преуспеть с возвращаемым значением или с ошибкой Try
.То есть они могут содержать код, который выбрасывает , или, когда я обнаруживаю ошибки «вручную», я искусственно создаю Throwable
и возвращаю Failure
.Возвращаемое значение этих методов, следовательно, равно Try[ReturnType]
.
Теперь я прочитал, что создание исключений несколько неоптимально, поскольку создает трассировку стека (и, следовательно, медленно), которая мне даже не нужна.Я также видел примеры использования подкласса ControlThrowable
, который не создает трассировку стека, однако у них также нет сообщения, и Try
, конечно, не поймает его.
Теперьмой конкретный вопрос был бы, должен ли я вообще отдавать предпочтение Either
над Try
, когда я хочу выполнить обработку ошибок во время выполнения / возвращаемые значения метода, и использовать Try
только в ситуациях, когда мне действительно нужно перехватить что-то (например, код третьей стороны)?
Таким образом, мне бы не пришлось создавать неуклюжие Throwable
s, а вместо этого использовать, например, только строки в Left
для ошибок.
Так что в основном:
Option
: ежедневное использование для чего-то, что обычный имеет значение или нет Try
: перехват исключений внутри методов, но не используется как возвращаемое значение Either
: универсальное возвращаемое значение, содержащее ошибку (строку) или значение успеха
Сработает ли эта концепция, или существует более жизнеспособный / общий подход?