[TS/JS] 처리를 공통화하는 기술

세상에는 흥분되는 일이 많지만, 가장 흥분되는 것은 고급 함수를 정의할 때다!


  const add3 = (x: number) => x+3

  const double = (x:number) => x*2
  const main1 = () => (n :number) => {
        const x = add3(n+3)
	
                // ↓同じ処理
        const y = double(x)
        const z = double(x+y) + add3(y-x) + 7
        return (z+1).toString()

  }

  const main2 = () => (n :number) => {
        const x = add3(n-1)
	
                // ↓同じ処理
        const y = double(x)
        const z = double(x+y) + add3(y-x) + 7
        return (z+1).toString()

}
위에서 말한 바와 같이 x의 값만 다르지만 이후의 처리는 같다.
mainN 함수가 증가함에 따라 같은 처리를 여러 번 쓸 수 있습니다.
이런 상황을 피하기 위해서 함수를 포괄하는 방법이 있다.
'wrapper 함수'라고도 하죠.
4
// ここで関数の型をかくのが面倒なので関数を表す型に名前をつけます。
type Reader<A, B> = (args: A) => B;

const wrapper = (wrapped: Reader<number, number>): Reader<number, string> => (item => {
    const x = wrapped(item)
    
    const y = double(x)
    const z = double(x+y) + add3(y-x) + 7
    return (z+1).toString()
})
'wrapper 함수'를 사용하면 다음과 같은 개작을 할 수 있다.
const main1 = () => wrapper((n :number) => add3(n + 3))

const main2 = () => wrapper((n :number) => add3(n - 1))

좋은 웹페이지 즐겨찾기