重构函数以使用咖喱

问题描述 投票:0回答:1

我有三个函数,我想用curry重构,但我很难搞懂返回函数的函数。我正试图分解和设计curry函数作为出发点。

我找到了这个 媒介文章 这给了一个非常简单的设计。

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);
  • if: debugToggle - 它就会传递 mapCatValueToKey 凑齐猫种
  • 否则:发出网络请求,传递一个数组的 catBreedsgetPriorityBreed
  • 将一些数据与返回的 breed 和a config 范围内
getPriorityBreed(prioritisedBreeds, catBreeds, catDefintions)
  • 电话 mapCatValueToKey 映射到 catBreeds 并用 catDefintions
  • 循环浏览两个列表-- prioritisedBreedsmappedCats 由上而下返回优先级 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);

  // ...
}

我的问题是:

  1. 我应该如何设计这个函数?
  2. 我是应该关心内部结构还是只设计函数和它返回的函数?
  3. 重构时,我应该先从外在函数还是内在函数着手?

希望得到任何帮助:)

javascript functional-programming currying partial-application
1个回答
0
投票

我想让钩子不知道 CAT_DEFS 并将其直接传递给 getCatHelper.

我做了这个工作。

export function getCatHelper {
    return (
        prioritisedBreeds,
        catDefintions,
        debugToggle,
        getDataLayer = getDataFromRequest
    ) {

    // ...

    };
}
function useCatHook(
  config,
  getCat (
      prioritisedBreeds,
      catDefintions,
      debugToggle
  ) = getCatHelper(CAT_DEFS),
  debugToggle
) {

  // ...

}
© www.soinside.com 2019 - 2024. All rights reserved.