기초
- Maybe는 데이터 타입으로 함수의 근본적 오류와 결측값 표시(???)에 사용된다.
- 값일 수도(Just) 있고 아무것도 아닐 수도(Nothing) 있다.
- Just는 현재의 값을 래핑하는 객체이다.
- Nothing은 부재의 값을 의미한다. 단순히 null이라고 해석해도 좋다.
- 두 값은 모두 null 체크가 되지 않은 옵셔널한 값이나 익셉션 핸들링을 다루기 쉽게 돕는다.
사용하지 않은 경우
const port = parseInt(getConfig()?.port ?? '8080'
사용한 경우
const port = getConfig() .chain(x => x.port) .map(parseInt) .orDefault(8080)
메소드의 종류
of
타입: Maybe
- Just 타입으로 래핑된 값을 반환한다.
Maybe.of(10) => Just(10)
empty / zero
타입: Maybe
Nothing
을 반환한다.Maybe.empty() => Nothing Maybe.zero() => Nothing
fromNullable
타입: Maybe
- 값이 null이거나 undefined인 경우 Nothing을 반환하고, 그렇지 않은 경우 Just를 반환한다.
Maybe.fromNullable(null) => Nothing Maybe.fromNullable(10) => Just(10)
fromFalsy
타입: Maybe
- 값이 Falsy한 값에 해당하는 경우 Nothing을 반환하고, 그렇지 않은 경우 Just를 반환한다.
Maybe.fromFalsy('') => Nothing Maybe.fromFalsy(0) => Nothing
isMaybe
타입: boolean
- 인자의 타입이 Maybe에 해당하는지 검사한다.
Maybe.isMaybe(null) => false Maybe.isMaybe(Just(10)) => true
isJust
타입: boolean
- 인자의 타입이 Just에 해당하는지 검사한다.
Just(5).isJust() => true Nothing.isJust() => false
isNothing
타입: boolean
- 인자의 타입이 Nothing에 해당하는지 검사한다.
Just(5).isNothing() => false Nothing.isNothing() => true
chain
타입: Maybe
- 명령을 수행한 후 Maybe를 반환한다. 값이 유실될 수 있는 로직에서 유용하다.
Just(5).chain(x => Just(x + 1)) => Just(6) Nothing.chain(x => Just(x + 1)) => Nothing
chainNullable
타입: Maybe
- 명령을 수행한 후 Nullable value를 반환한다.
m.chain(x => Maybe.fromNullable(f(x)))
에 해당한다.Just(5).chainNullable(x => x + 1) => Just(6) Just({prop: null}).chainNullable(x => x.prop) => Nothing
join
타입: Maybe
- Nested한 Maybe를 flatten하게 만든다.
m.chain(x => x)
에 해당한다.Just(Just(5)).join() => Just(5) Nothing.join() => Nothing
unsafeCoerce
타입: T
- Maybe 내부의 값을 반환한다. 만일 Nothing 타입인 경우 에러를 던진다.
Just(5).unsafeCoerce() => 5 Nothing.unsafeCoerce() => `Uncaught Error: Maybe#unsafeCoerce was ran on a Nothing`
extract
타입: T
- Maybe 내부의 값을 반환한다. 만일 Nothing 타입인 경우 undefined를 반환한다.
Just(5).extract() => 5 Nothing.extract() => undefined
extractNullable
타입: T
- Maybe 내부의 값을 반환한다. 만일 Nothing 타입인 경우 null을 반환한다.
Just(5).extractNullable() => 5 Nothing.extractNullable() => null
orDefault
타입: T
- 만일 Nothing인 경우 디폴트 값을 반환한다. 그렇지 않은 경우 본래의 this 값을 반환한다.
Just(5).orDefault(0) => 5 Nothing.orDefault(0) => 0
orDefaultLazy
타입: T
- Nothing인 경우에는 디폴트 값을 반환한다. 그렇지 않은 경우 lazy version이므로 내부 로직을 수행하지 않는다.
Just(5).orDefaultLazy(() => expensiveComputation()) => 5 Nothing.orDefaultLazy(() => 0) => 0
toEither
타입: Either<L, T>
- this가 Nothing인 경우 Left를 반환한다. this가 Just인 경우 Right를 반환한다.
Just(5).toEither('Error') => Right(5) Nothing.toEither('Error') => Left('Error')
'DEVELOPMENT > JAVASCRIPT' 카테고리의 다른 글
purify-ts / Function (0) | 2023.02.12 |
---|---|
purify-ts / Either (0) | 2023.02.11 |
tsconfig 설정에 대해 (0) | 2022.06.28 |