リンクの理解
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
Reference
この問題について(リンクの理解), 我々は、より多くの情報をここで見つけました
https://velog.io/@skyepodium/커링-알아보기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// 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
# 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
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
Reference
この問題について(リンクの理解), 我々は、より多くの情報をここで見つけました https://velog.io/@skyepodium/커링-알아보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol