• 函数柯里化详解


    一:函数柯里化介绍

    计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。

            函数柯里化是一种函数式编程技术,它可以将一个接受多个参数的函数转换为一系列只接受单个参数的函数。这种技术的主要目的是为了简化函数的调用方式,同时也可以提高代码的可读性和可维护性。
            在函数柯里化中,我们可以将一个接受多个参数的函数转换为一个只接受一个参数的函数,然后再返回一个新的函数,这个新的函数也只接受一个参数。这个过程可以一直进行下去,直到我们得到一个最终的函数,这个函数只接受一个参数,并且返回我们最终想要的结果。

    二:手写函数柯里化

    基础使用 

    设计思路

    • 定义接受一个参数的函数
    • 内部返回一个接受剩余参数的新函数,返回累加结果

    书写代码

            在下方代码中,我们定义了一个参数为 a 的 sum 函数,并且在这个函数里返回了另一个参数为b的函数。在新函数里,我们将 a 和 b 求和并返回结果。这就是函数柯里化。 

    运行效果

    经典面试题

    设计思路:

    • 保存不定长参数
    • 是否达到长度
    • 累加5个参数
    • 返回函数

    书写代码

    1. <script>
    2. function sumMaker(length) {
    3. // 存储参数
    4. let nums = []
    5. function sum(...args) {
    6. nums.push(...args)
    7. if (nums.length >= length) {
    8. // 长度到length
    9. const res = nums.slice(0, length).reduce((p, v) => p + v, 0)
    10. nums = []
    11. return res
    12. } else {
    13. // 长度没到length
    14. return sum
    15. }
    16. }
    17. return sum
    18. }
    19. let sum = sumMaker(5)
    20. const data = sum(1, 2, 3)(4, 5, 6)
    21. console.log(data)
    22. script>

    运行效果

    实际应用

            函数柯里化常用于 参数的复用:为函数预制通用参数,供多次复用

    1. <script>
    2. // 判断类型
    3. // 方法一
    4. // const typeOfType = function (type) {
    5. // // 复用 类型判断的逻辑
    6. // function isUndefined(thing){
    7. // return typeof thing === type
    8. // }
    9. // return isUndefined
    10. // }
    11. // 简化写法
    12. const typeOfType = type => thing => typeof thing === type
    13. // typeOfType动态生成类型判断函数,
    14. const isString = typeOfType('string')
    15. console.log(isString(123));
    16. console.log(isString('haha'));
    17. script>

    三:总结

             通过上述介绍,其实函数柯里化可以理解为一种编程思想,在真正的开发中这种纯函数柯里化的问题是很少遇到的,更多的是用来面试,所以各位小伙伴对这个定义以及写法有所掌握即可。好啦,本文到此结束啦,希望能够对你有所帮助哦!

  • 相关阅读:
    selenium等待元素加载、元素操作、执行js、切换选项卡、登录cnblogs(chrome)、抽屉半自动点赞
    springboot集成Logback 日志写入数据库
    mac版微信小程序反编译学习
    大数据与人工智能人脸识别
    《软件方法》自测题解析-006:误以为是业务建模
    机器学习——主成分分析(PCA,未完)
    自动驾驶域控制器nvidia环境搭建
    JavaWeb(四)
    2022.8.14 力扣1422. 分割字符串的最大得分
    Alibaba微服务组件Nacos注册中心
  • 原文地址:https://blog.csdn.net/c18559787293/article/details/133973605