リンクの理解

14763 ワード

1.概要


1)定義


「トリム」とは、複数のパラメータを持つ関数を連続して単一のパラメータを持つ関数に変更することです.

2)例

// 1. 커링
// 1. 2개의 파라미터를 받아 합을 계산하는 함수에 커링 적용
const curriedSum = a => {
    return b => {
        return a + b
    }
}

// 화살표 함수를 적용한다면 한줄로 표현이 가능합니다.
// const curriedSum = a => b => a + b

// 2. 커링이 적용된 함수 실행
const res = curriedSum(3)(4)

console.log('res', res) // 7

3)カードリングの可能性の原因


外部関数のコンテキストが消えても、内部関数は外部関数の実行環境を参照できるため、アセンブリできます.

4)エンクロージャ


これは数学者のハスクルクリーから発展した名前で、他の可能な言語にも適用されています.
# 1. 2개의 파라미터를 받아 합을 계산하는 함수에 커링 적용
def curried_sum(a):
    def sum_a(b):
        return a + b
    return sum_a

# 람다를 적용한다면 한줄로 표현이 가능합니다.
# curried_sum = lambda a: lambda b: a + b

# 2. 커링이 적용된 함수 실행
res = curried_sum(3)(4)

print('res', res) # 7

2.どこに役立ちますか。


1)関数の合成


関数合成によりコードの再利用性が向上します.
reduce、args(類似配列オブジェクト)を使用して、複数の関数を受信して実行する複合関数を作成できます.
const compose = (...args) => {
    return args.reduce((prev, next) => {
        return (...values) =>{
            return next(prev(...values))
        }
    }, k => k)
}
次の例のように、1.破棄絶対値、3.3つの三次方程式関数を合成した後-5.54および[1, 2, 3, 4, 5]のリストのマッピングに適用することができる.
// 1. 버림 함수
const trunc = x => ~~x

// 2. 절대값 함수
const abs = x => x < 0 ? x * -1 : x

// 3. 세제곱 함수
const triple = x => x * x * x

// 4. 컴포즈 함수
const compose = (...args) => {
    return args.reduce((prev, next) => {
        return (...values) =>{
            return next(prev(...values))
        }
    }, k => k)
}

// 5. 함수 합성
const composed = compose(
    trunc,
    abs,
    triple
)

// 6. 결과 확인
console.log('res', composed(-5.54)) // 125

const a = [1, 2, 3, 4, 5]
console.log(a.map(composed)) // [ 1, 8, 27, 64, 125 ]
もちろん、以下のようにcloserやcurlingを用いて一度に行うことも可能であり、composeに比べて、以下の方法は右から左(f 1~f 3)に読み取る必要がある.
いずれにしても、左->右の作文は右の作文より少し見慣れていない.
const f = (f1, f2, f3) => {
    return x => f3(f2(f1(x)))
}

const fComposed = f(trunc, abs, triple)

const res = fComposed(-5.54)

console.log('res', res) // 125

2)遅延評価


関数はすぐには実行されません.コストの高いパラメータを追加および回収して、効率を向上させることができます.
const log = a => b => c => `${a}-${b}-${c}`

const todayLog = log(new Date().getDate())

const res = todayLog('service')('error')

console.log('res', res) // 14-service-error