命令式编程、声明式编程和函数式编程的理解与思考

命令式、声明式和函数式三种编程范式都各有特色。

命令式编程关注的是具体步骤。

声明式编程关注的是最后的结果。

函数式编程在声明式编程基础上更进一步,将函数作为第一公民。

命令式编程

在平时常见的编程范式就是命令式编程。

来个生活中的例子说明一下什么是命令式编程。比如,小红想吃西红柿炒鸡蛋,然后她妈妈就去买菜、洗菜、做好西红柿炒鸡蛋。小红她妈妈就是在执行命令式编程,必须清楚的知道每一步的动作。

下面再写一个编程中对应的例子:

在一个集合中找到所有大于3的数字。

ArrayList<Integer> collation = new ArrayList<Integer>();
collation.add(1);
collation.add(4);
collation.add(5);
ArrayList<Integer> result = new ArrayList<Integer>();
for (int num : collation) {
    if( num % 2 == 1 ){
        result.add(num);
    }
}

不管在C/C++、java、python、javascript等语言中都存在这种写法。

声明式编程

下面再看看声明式编程范式。

还是拿上面那个小红要吃西红柿炒鸡蛋的例子,我们现在站在小红的角度来考虑一下问题,她关注的是最后能吃到西红柿炒鸡蛋,至于是她妈妈做的,还是她妈妈点外卖,还是她妈妈请大厨做的,其实都不重要。小红其实就是在做声明式编程,她只需要表达清楚想吃西红柿炒鸡蛋这件事就行了。

在编程中,SQL是最好的声明式编程例子。还是拿上面那个在集合中找数字的例子,用SQL的话只需要像下面这样就行。

select * from collection where num > 3

至于数据库中如何实现这条语句,其实根本不用关心,我们关心得是最后获取到得结果。

函数式编程

函数式编程是在声明式编程基础之上发展的,也是为了把一件事情描述清楚,关注结果而不管具体实现细节,并且将函数作为一等公民,可以出现在任何地方,可以作为函数的参数,也可以作为函数的返回值。在Java8中对于函数式编程的支持就是lamda表达式。

还是拿上面那个在集合中获取大于3的数字例子,在Java中也是存在相应的写法的:

List<Integer> result = collation.stream().filter(num -> num > 3).collect(Collectors.toList());

总结

声明式编程和命令式编程站的角度不同,一个关注的式结果,一个关注的是过程,声明式编程对于接口的使用者来说是非常好的,但是接口的内部还是得要用命令式编程来实现。

函数式编程随着大数据并发处理数据得需求而逐渐热起来。我对它得理解还不是很深,日后有机会再来补这一块知识。

你可能感兴趣的:(编程范式,精华创作,扩展自我边界)