重构函数以使用柯里化
Refactor functions to use currying
我想使用柯里化重构三个函数,但我正在努力了解 return 函数。我试图分解并设计咖喱函数作为起点。
我发现这个 medium article 的设计非常简单。
function discount(discount) {
return (price) => {
return price * discount;
}
}
const tenPercentDiscount = discount(0.1);
tenPercentDiscount(500);
在高层次上,我的函数是这样调用的:
getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
.then((breed) => setConfigData(breed, config))
.catch(() => false);
- 如果:
debugToggle
- 它通过 mapCatValueToKey
获得猫品种
- else: 发起网络请求,将
catBreeds
的数组传给getPriorityBreed
- 设置一些数据 returned
breed
和范围内的 config
getPriorityBreed(prioritisedBreeds, catBreeds, catDefintions)
- 调用
mapCatValueToKey
映射到 catBreeds
并使用 catDefintions
创建一个新数组
- 循环遍历两个列表 -
prioritisedBreeds
和 mappedCats
从上面到 return 优先级 breed
mapCatValueToKey(breed, catDefintions)
- 将品种(值)映射到猫定义对象的映射函数
getCatHelper
的调用方式如下:
function useCatHook(
config: Config,
catDefintions: any = CAT_DEFS,
getCat: (
prioritisedBreeds,
catDefintions,
debugToggle,
) = getCatHelper,
debugToggle,
): any {
const [data, setData] = useState(undefined);
const prioritisedBreeds = Object.keys(config);
// ...
getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
.then(breed => setData(breed))
.catch(() => false);
// ...
}
我的问题是:
- 我该如何设计?
- 我应该关心内部结构还是只设计功能及其功能return?
- 重构时,我应该先从外部函数还是内部函数开始工作?
任何帮助将不胜感激:)
我希望钩子不知道 CAT_DEFS
并将其直接传递给 getCatHelper
。
我做了这个作品:
export function getCatHelper {
return (
prioritisedBreeds,
catDefintions,
debugToggle,
getDataLayer = getDataFromRequest
) {
// ...
};
}
function useCatHook(
config,
getCat (
prioritisedBreeds,
catDefintions,
debugToggle
) = getCatHelper(CAT_DEFS),
debugToggle
) {
// ...
}
我想使用柯里化重构三个函数,但我正在努力了解 return 函数。我试图分解并设计咖喱函数作为起点。
我发现这个 medium article 的设计非常简单。
function discount(discount) {
return (price) => {
return price * discount;
}
}
const tenPercentDiscount = discount(0.1);
tenPercentDiscount(500);
在高层次上,我的函数是这样调用的:
getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
.then((breed) => setConfigData(breed, config))
.catch(() => false);
- 如果:
debugToggle
- 它通过mapCatValueToKey
获得猫品种 - else: 发起网络请求,将
catBreeds
的数组传给getPriorityBreed
- 设置一些数据 returned
breed
和范围内的config
getPriorityBreed(prioritisedBreeds, catBreeds, catDefintions)
- 调用
mapCatValueToKey
映射到catBreeds
并使用catDefintions
创建一个新数组
- 循环遍历两个列表 -
prioritisedBreeds
和mappedCats
从上面到 return 优先级breed
mapCatValueToKey(breed, catDefintions)
- 将品种(值)映射到猫定义对象的映射函数
getCatHelper
的调用方式如下:
function useCatHook(
config: Config,
catDefintions: any = CAT_DEFS,
getCat: (
prioritisedBreeds,
catDefintions,
debugToggle,
) = getCatHelper,
debugToggle,
): any {
const [data, setData] = useState(undefined);
const prioritisedBreeds = Object.keys(config);
// ...
getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
.then(breed => setData(breed))
.catch(() => false);
// ...
}
我的问题是:
- 我该如何设计?
- 我应该关心内部结构还是只设计功能及其功能return?
- 重构时,我应该先从外部函数还是内部函数开始工作?
任何帮助将不胜感激:)
我希望钩子不知道 CAT_DEFS
并将其直接传递给 getCatHelper
。
我做了这个作品:
export function getCatHelper {
return (
prioritisedBreeds,
catDefintions,
debugToggle,
getDataLayer = getDataFromRequest
) {
// ...
};
}
function useCatHook(
config,
getCat (
prioritisedBreeds,
catDefintions,
debugToggle
) = getCatHelper(CAT_DEFS),
debugToggle
) {
// ...
}