理解函数式编程是什么,它有哪些优点

由一个例子引出声明式编程和函数式编程的区别
const arr = [[1, 3, 6], [1, 6, 9], [2, 5], 8, [7, 1, 2, 3]];
将arr通过一些列处理后得到结果为: [1, 2, 3, 5, 6, 7, 8, 9]
通过分析,要得到上面的结果,数组需要经过 偏平化、去重、排序

下面用两种不同的编程方式来实现:

(一)、函数式编程(Imperative) :

命令式编程 命令式编程主要思想是关注计算机执行的步骤,即每一步应该做什么,怎么做

// 1、偏平化
const flatten = input => {
    let result = [];
    input.forEach(v => {
        Array.isArray(v) ? (result = result.concat(flatten(v))) : result.push(v);
    });
    return result;
};

// 2、去重
const unique = input => {
    let ret = [];
    for (var i = 0; i < input.length; i++) {
        if (ret.indexOf(input[i]) == -1) {
            ret.push(input[i]);
        }
    }
    return ret;
};

//3、排序(冒泡)
const sort = input => {
    for (let i = 0; i < input.length - 1; i++) {
        for (let j = 0; j < input.length - 1; j++) {
            if (input[j] > input[j + 1]) {
                let temp = input[j];
                input[j] = input[j + 1];
                input[j + 1] = temp;
            }
        }
    }
    return input;
};

//调用
let formatArr = sort(unique(flatten(arr)));

console.log('formatArr:', formatArr); //   [1, 2, 3, 5,  6, 7, 8, 9]

(二)、声明式(Declarative):

声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么。接近自然语言,简洁优雅

let formatArr2 = [...new Set(arr.flat(Infinity))].sort((a, b) => a - b);
console.log('formatArr2:', formatArr2); //   [1, 2, 3, 5,  6, 7, 8, 9]

通过上面两种编程方式实现后,得到的结果是一样的。
对比发现,声明式编程的重点在于做什么,而不是怎么去做。
对比命令式编程有明显的优点:简化了开发者的工作,减少了重复工作.,留下了改进的空间,提供了全局协调能力,代码清晰易懂,提高工作效率

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值