函数式编程和面向对象编程比较有哪些区别?
优缺点:

对象方式进行编程有什么不同,这里我做了一个总结,作为函数式编程和面向对象编程,它们有诸多方面是不一样的。首先作为设计思路来说,面向对象编程它是采用面向对象的方式进行分析设计和开发,而函数式编程更像我们以前学习,比如c语言或者VB一样,采用面向过程的方式去定义一段一段的代码,然后通过代码的直接堆叠来完成对应的工作。
开发侧重
那么在开发侧重的时候,因为思路不一样,所以它的侧重点也不一样,作为面向对象来说,它是侧重于中间的过程。重分析设计,比如我们前面学习过的mvc,这里就涉及到Controller service、deo等等这些对象,那么这都是我们在面向对象开发时必须要考虑的问题。那函数式编程它就不太一样了,函数式编程要求快速的实现结果,函数式编程倾向于以最少的代码得到运行结果。
可读性
可读性是我们由人眼阅读的时候,这个代码是否好理解,因为面向变成这里边涉及到了太多的逻辑和结构,比如mvc这种模式,还有各种各样的设计模式等等,这就导致我们面向对象的工程结构复杂,可读性相对较差。而函数识别成则简单粗暴的多,我们是将一块一块的代码封装成诸如像function或者consumer这样的函数式接口实现,每一个函数式接口实现都有固定的功能,所以你在调用它的时候,更符合我们人脑逻辑思维的前后顺序的可读性会更好一些。在Java中如果采用函数式编程,尤其是结合Lambda表达式来实现的话,它的代码量远比面向对象编程的这种设计要少很多。
并发问题
作为面向对象编程中,我们要考虑比如线程的并发问题,线程的安全问题以及线程的同步问题,如果涉及不到就可能会出现线程安全或者资源争执的情况,但是在函数式编程中就不存在这种问题,每一个函数都是一个独立的功能,所引用的数据都是在我们代码内部来实现的。唯一的输入项就是我们传入的参数,而参数本身它不存在,所以作为函数式编程是不存在线程安全的问题,你大可放心的去使用。
健壮性
当然是面向对象编程来的要好,因为面向对象编程它是有设计的,很多项目开发过程中它的一些问题通过巧妙的设计都可以规避掉,但是函数式编程显然在这方面就差很多,它只是面对我们目前手头的工作,看见有哪些问题我们直接去应用解决,所以它的设计性就相对较差,那么带来的就是健壮性相对较差。
应用场景
如果你开发的是一个需要多人协作的比较大的应用项目的话,那么还是采用面向对象编程的方式。如果你在开发一些小型应用的时候,比如写一些系统运维的程序或者一些简单的计算代码,那么这个时候就可以使用函数式编程来快速实现它,可以帮助我们节省不少的代码一样。