---
Either는 Left와 Right 두 방향으로 구성된 데이터 타입이다.
Maybe와 유사하나 누락된 값에 대한 정보 저장이 가능하다는 특징이 있다(가령 에러 메시지 같은).
"Right is right" 라는 컨벤션이 있어 대개 성공값은 Right에, 실패값은 Left에 저장한다.
오른쪽 편향적이므로
map
,chain
과 유사한 메소드들은 Right에서 동작한다.
Left
- 일반적으로 동작에 대한 실패를 나타내는 정보를 담당한다.
// Inferred type is randomEither: () => Either<never, number> | Either<string, never> const randomEither = () => Math.random() > 0.5 ? Right(1) : Left('Error')
Left('Error') => Left('Error') // Either<string, never>
Right
- 일반적으로 동작에 대한 성공 결과값과 정보를 담당한다.
Right(10) => Right(10) // Either<never, number>
사용 사례
const getPort = () => getConfig() // Maybe makes a great combo with Either
.chain(x => x.port)
.toEither(new Error("Couldn't parse port from config"))
const port: number = getPort() // Either<Error, number>
.ifLeft((e) => loggingService.log(e.message))
.map(parseInt)
.orDefault(8080)
메소드의 종류
of
반환 타입: Either<never, R>
- 값을 Right로 감싼다.
Either.of(5) -> Right(5)
encase
반환 타입: Either<L, R>
- 함수를 호출하고 Right를 반환한다. 만일 exception이 발생한 경우나 실패가 발생한 경우 Left를 반환한다.
Either.encase(() => { throw Error('Always fails') }) -> Left(new Error('Always fails')) Either.encase(() => 10) -> Right(10)
isLeft
타입: boolean
- Left인 경우 true를 반환한다. 그렇지 않은 경우 false를 반환한다.
Left('Error').isLeft() -> true Right(10).isLeft() -> false
isRight
타입: boolean
- Right인 경우 true를 반환한다. 그렇지 않은 경우 false를 반환한다.
Left('Error').isRight() -> false Right(10).isRight() -> true
chain
반환 타입: Either<L | L2, R2>
- 함수를 호출하고 Either를 반환한다. 실패할 가능성이 있는 계산을 수행할 때 사용하면 용이하다.
Left('Error').chain(x => Right(x + 1)) -> Left('Error') Right(5).chain(x => Right(x + 1)) -> Right(6)
join
반환 타입: Either<L | L2, R2>
- Nested한 값을 flatten할 때 용이하다.
e.chain(x => x)
와 동일하다.Right(Right(5)).join() -> Right(5) Left(Left('Error')).join() -> Left(Left('Error'))
orDefault
반환 타입: R
- this 값을 반환한다. Left 값인 경우 디폴트 값을 반환한다.
Left('Error').orDefault(0) -> 0 Right(5).orDefault(0) -> 5
leftOrDefault
반환 타입: L
- this 값을 반환한다. Right 값인 경우 디폴트 값을 반환한다.
Left('Error').leftOrDefault('No error') -> 'Error' Right(5).leftOrDefault('No error') -> 'No error'
toMaybe
반환 타입: Maybe
- this 값을 바탕으로 Just를 반환한다. Left일 경우 Nothing을 반환한다.
Left('Error').toMaybe() -> Nothing Right(5).toMaybe() -> Just(5)
leftToMaybe
반환 타입: Maybe
- this 값을 바탕으로 Just를 반환한다. Right일 경우 Nothing을 반환한다.
Left('Error').leftToMaybe() -> Just('Error') Right(5).leftToMaybe() -> Nothing
swap
반환 타입: Either<R, L>
- Left인 경우 Right, 반대의 경우도 마찬가지이다. vice versa.
Right(5).swap() -> Left(5) Left(5).swap() -> Right(5)
'DEVELOPMENT > JAVASCRIPT' 카테고리의 다른 글
purify-ts / Function (0) | 2023.02.12 |
---|---|
purify-ts / Maybe (0) | 2023.02.10 |
tsconfig 설정에 대해 (0) | 2022.06.28 |