코딩공부&일상기록 블로그

매일매일 조금씩

JS

effect를 써야하는 이유

김으엉 2024. 6. 28. 01:38

 

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