이거 아니면 저것
3852 단어 denojavascriptfunctionaljs
어느 쪽 ↔️ 유형을 사용하면 더 안전한 알고리즘을 만들고 다른 라이브러리 코드를 애플리케이션에 안전하게 만들 수 있습니다. 중 ↔️ 유형은 값을 둘러싼 래퍼 또는 컨테이너이며 컨테이너는 Right ➡️ 또는 Left ⬅️의 두 가지 인스턴스로 제공됩니다. 파이프라인에서 오른쪽 ➡️ 인스턴스는 처리 파이프라인을 따라 계속 진행되고 왼쪽은 그렇지 않습니다. 맵 및 체인 메서드를 사용하여 초기 값을 취하고 Left ⬅️ 또는 Right ➡️ 인스턴스에 포함된 결과를 반환하는 모두 ↔️ 파이프라인을 만들 수 있습니다. 접는 방법.
Either.of(1)
.map(add(1))
.map(multiply(2))
.fold(
v => console.log('Left: ', v),
v => console.log('Right: ', v) // Right: 4
)
이 예에서 우리는 값 1을 취하여 어느 ↔️ 컨테이너에 넣은 다음 변환 함수를 사용하여 해당 컨테이너를 매핑합니다. 첫 번째 함수는 중 ↔️의 값에 1을 더하고 두 번째 맵에는 새 값에 2를 곱하는 함수가 있습니다. 이 함수들 각각은 값이 숫자가 아닌지 확인하지 않습니다. 더하기 기능과 곱하기 기능은 항상 예상 유형의 값을 제공하기 위해 둘 중 하나에 의존합니다. 값이 숫자인지 확인하기 위해 연쇄 함수를 사용합시다.
Either.of(1)
.chain(isNumber)
.map(add(1))
.map(multiply(2))
.fold(
v => console.log('Left: ', v),
v => console.log('Right: ', v)
)
function isNumber (v) {
if (is(Number, v)) {
return Right(v)
} else {
return Left('Not a Number')
}
}
체인 방법을 추가하여 함수의 결과로 다른 Each ↔️ 인스턴스를 전달할 수 있습니다. 이를 통해 값이 숫자가 아닌 경우에는 Each ↔️를 오른쪽 ➡️에서 왼쪽 ⬅️으로 변경할 수 있습니다. 새로운 권리 ➡️를 컨테이너로 반환할 수 있습니다. 이는 값이 isNumber 검사를 통과하는 경우 컨테이너에서만 실행되기 때문에 더하기 및 곱하기 메서드를 안전하게 실행할 수 있는 기능을 제공합니다.
슬픈 경우를 시도해 보겠습니다.
Either.of(null)
.chain(isNumber)
.map(add(1))
.map(multiply(2))
.fold(
v => console.log('Left: ', v),
v => console.log('Right: ', v)
)
function isNumber (v) {
if (is(Number, v)) {
return Right(v)
} else {
return Left('Not a Number')
}
}
더하기 및 곱하기 함수는 절대 호출되지 않습니다. isNumber 함수의 결과가 Left ⬅️ 인스턴스이기 때문에 건너뜁니다.
이 패턴을 사용하면 모든 기능을 안전하게 만들 수 있습니다. fromNullable 및 tryCatch의 두 가지 공통 기능이 있습니다.
fromNullable
fromNullable은 값이 null인지 테스트하고 null이 아니면 Right를 반환합니다. ➡️ null이면 Left ⬅️를 반환합니다.
Either.of(null)
.chain(fromNullable)
.fold(
v => console.log('Left: ', v),
() => console.log('does not get called')
)
tryCatch
tryCatch는 함수를 취하고 해당 함수 주위에 tryCatch를 래핑합니다. 오류가 발생하면 오류와 함께 Left ⬅️를 반환하고, 오류가 없으면 함수의 결과를 반환합니다.
tryCatch(() => {
throw new Error('Catch me if you can!')
})
.fold(
v => console.log('You got me'),
v => conosle.log('You can\'t catch me, I am the gingerbread man.')
)
요약
어느 쪽 ↔️ 유형은 로직 파이프라인 내에서 null과 오류를 처리하기 위한 공통 기능 의미 체계를 가진 강력한 도구를 제공합니다. 이 패턴을 사용하면 구성할 수 있는 모든 함수에 유효성 검사 논리를 삽입하지 않고도 더 안전한 코드를 작성할 수 있습니다.
데노 사용? 이 패키지를 확인하십시오: https://github.com/hyper63/either
예시 프로젝트
여기에서 예제 프로젝트를 확인하세요.
hyper63/either-examples
NOTE: The example code is run using Deno 1.7, but you could use Either with the browser or NodeJS
Brendan Church에 Unsplash의 사진
Reference
이 문제에 관하여(이거 아니면 저것), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hyper/either-this-or-that-3m5j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)