从面向对象编程到函数式编程的思想转换
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的概念
总结
我们的关注点应该从“怎么做”,回归到“做什么”的本质上,只要能达到目的,过程和形式其实都不重要。
所以我们需要转换编程思想。
欢迎评论、转发
后续将持续更新….
以上是关于从面向对象编程到函数式编程的思想转换的主要内容,如果未能解决你的问题,请参考以下文章