Украл из языка Kotlin, понравилась концепция, описанная здесь.
Как-то прижилось.
Конструкция для красивой работы с методами, которые могут выполняться с предусмотренной ошибкой. Возвращает либо ошибку, либо успешный результат.
Если инициализировать с пустыми аргументами - Either
примет состояние "ошибка". Также можно передать в качестве ошибки некоторый объект (например, текст ошибки) - тогда надо инициализировать с пустым первым аргументом, а во втором передать "ошибочный" объект. В первом аргументе всегда передаётся верный объект. Если первый аргумент присутствует, то Either
примет состояние "успех".
Either.Create([SuccessValue[, ErrorValue]])
Аргумент | Тип | Описание |
---|---|---|
SuccessValue |
Variant | передаваемое значение/объект в случае успеха |
ErrorValue |
Variant | передаваемое значение/объект в случае ошибки |
Полe | Тип | Описание |
---|---|---|
IsError |
Boolean | статус "ошибка" |
IsSuccess |
Boolean | статус "успех" |
ErrorValue |
Variant | значение/объект в случае ошибки |
SuccessValue |
Variant | значение/объект в случае успеха |
' возвращаем текущий документ
' либо, если нет открытых документов - возвращаем Either со статусом Error
Function GetDocument() as IEither
If ActiveDocument Is Nothing Then
Set GetDocument = Either.Create
Exit Function
End If
Set GetDocument = Either.Create(ActiveDocument)
End Function
' запрашиваем активный документ в главной процедуре
' если его нет - выдаём ошибку и завершаем
Sub Main()
Dim MyDocument as Document
With GetDocument
If .IsError Then
VBA.MsgBox "Нет открытых документов"
Exit Sub
End If
Set MyDocument = .SuccessValue
End With
End Sub
Нет.