从面向对象编程到函数式编程的思想转换

Posted 龍柒茶馆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从面向对象编程到函数式编程的思想转换相关的知识,希望对你有一定的参考价值。










精彩内容

在数学中:函数就是有输入量,输出量的一套计算方案。

也就是拿什么东西做什么事情!

相对而言:面向对象过分的强调必须通过对象的形式来做事情做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。

比如我们要调用一个接口,我们必须要创建他的实现类对象,才能使用他无法直接调用。

而函数式思想尽量忽略面向对象的复杂语法-- 

强调做什么,而不是以什么形式做


从面向对象编程到函数式编程的思想转换

函数式思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。


比如我要使用Runable方式实现多线程程序:

一般的方式:

第一步
从面向对象编程到函数式编程的思想转换

从面向对象编程到函数式编程的思想转换

我们需要先创建Runnable接口的实现类,

接口中重写run方法

第二步
从面向对象编程到函数式编程的思想转换

从面向对象编程到函数式编程的思想转换

在主线程中,创建RunnableImpl对象,

将runnable传递到Thread中,

调用start方法,输出结果。

这种传统的方式有大量的代码冗余

当然,我们可以使用匿名内部类省去类的定义简化代码。

第一步
从面向对象编程到函数式编程的思想转换

从面向对象编程到函数式编程的思想转换

这种方式省略了RunnableImpl实现类,直接调用Runnable接口的run方法。

1.匿名内部类无参数:不需要任何条件即可执行该方案

2.无返回值:该方案不产生任何结果

3.代码块:即业务逻辑

代码简化了好多



之后我发现我们可以采用匿名对象,代码还可以继续简化

第二步
从面向对象编程到函数式编程的思想转换

从面向对象编程到函数式编程的思想转换

直接把匿名内部类当成参数来传递。

 

这个地方我们发现里面仍然有很多冗余的代码,我们从头到尾只需要指定run的方法体。这里有很多的问题:

 

1.为了指定run的方法体不得不新建一个Runnable接口实现类

2.为了省去一个RunnableImpl实现类的麻烦,不得不使用匿名内部类。

3.我们必须重写run方法。包括方法名称,方法参数,方法返回值。

而实际上,只有方法体才是关键所在。到这儿我和东哥发现,面向对象的思想过分的强调必须通过对象的形式来做事情而事实上有些需求我们完全可以尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做。


但他们的思想与传统的面向对象编程有很大区别,即函数式编程。

事实上,无论是什么语言,前端还是后端,这种思想正在慢慢普及。

Java中我们叫他lambda表达式。

第三步
从面向对象编程到函数式编程的思想转换

得出的结果是一样的,也是输出了一个括号,一个箭头,比匿名内部类要简单很多。

在这里,前面的一个括号()代表参数列表(无)

中间的一个箭头把后面的参数列表传递给方法体。

后面的输出语句即业务逻辑代码

当然,我们这里并不是说面向对象的不好,他的思想依然时很先进的,在我们jsES6的语法规范中,也同样引入了class的概念



总结

我们的关注点应该从“怎么做”,回归到“做什么”的本质上,只要能达到目的,过程和形式其实都不重要。

所以我们需要转换编程思想。

欢迎评论、转发

后续将持续更新….

以上是关于从面向对象编程到函数式编程的思想转换的主要内容,如果未能解决你的问题,请参考以下文章

函数式编程思想:耦合和组合,第2部分

JavaScript函数式编程:基本思想

iOS 中的链式编程函数式编程入门

Java 函数式编程

函数式编程思想:耦合和组合,第1部分

函数式编程与Lambda表达式(上)