Error처리에 강점이 있다.
import { Effect, pipe} from "effect";
class BadError extends Error { Show usages
}
function js() : boolean { Show usages
const num: number = Math.random();
if (num > 0.66) {
return true; //1/3확률로 true return
}else if (num > 0.33){
throw new Error(); //1/3 Error return
}else{
throw new BadError(); //1/3 BadError return
}
}//js()의 타입이 boolean으로만 조회됨
function parent():void { Show usages
js();
}
function main():void { no usages
parent();
}//파생 함수에서 조회 어려운 단점이 있음
위 처럼 코드를 진행할 경우
메인(js)함수의 타입이 boolean으로만 분류 되어
파생함수에서 호출할 때는 Error나 BadError와 같이 어떤 에러가 날 수 있는 조회하지 못하는 경우가 발생
하지만,
Effect를 이용해 명시적으로 succeed / fail 이렇게 적으면
어떤 성공타입과 에러타입을 가지고 있는지 확인 할 수 있게 됩니다.
//Effect를 이용한 예
const effect: Effect.Effect<boolean, Error | BadError
= Effect.try(evaluate:():... => {
const num:number = Math.random();
if (num > 0.66) {
return Effect.succeed(value: true); //1/3확률로 true return
}else if (num > 0.33){
return Effect.fail(new Error()); //1/3 Error return
}else{
return Effect.fail(new BadError()); //1/3 BadError return
}
}).pipe(Effect.flatMap(f:(v:Effect.Effect<boolean, nev
ZeroCho님의 영상을 참고해 복습의 개념으로 작성했습니다.
출처: https://youtube.com/shorts/MzFCHctD0lM?si=j-MuWOam2324ptRl