函数式编程的优缺点

本文介绍了函数式编程与面向过程、面向对象的区别,强调了其特点如值的首类性、不可变性和无副作用,阐述了优点如引用透明、易于分析和测试,以及性能优化。同时指出其复杂度高的缺点,以及纯函数和柯里化的概念及其影响。
摘要由CSDN通过智能技术生成

定义

函数式编程是一种编程范式,和面向过程,面向对象是同一个范畴的概念。
面向过程编程:编程方式基于过程,主要是向计算机描述我们具体解决问题的每个步骤,描述得越清楚,解决得越好。
面向对象编程:编程方式基于对象,把需要解决的具体问题抽象成对象,对对象的属性和方法进行封装,使对象具有继承,多态等这些特性,通过对象的方法之间互相调用来解决实际问题。
函数式编程:编程方式基于函数,把实际问题抽象出具体的函数,通过函数的组合和传递来解决具体的问题。

特点

  • 一类值(first class value)
    函数和变量一样,可以作为参数,也可以作为返回值,能够组合参与到具体的某种运算中。
  • 不可变性(immutable)
    变量的值是不可变的,一但赋予了它某个的值,它的值就不会再改变,这种编程方式使程序员能够更好的进行分析,也就是不会出现某些全局变量的修改,能够修改这些变量的方式有很多种,导致你整个程序的行为是不确定度,增加了这个分析的难点。
  • 无副作用(no effect)
    副作用是指它不是一个单纯的计算,而是涉及到一个与外部进行交互的一个过程,比如调用一些外部的API,或者做一些IO的操作,它不是一个单纯的计算,它的输出不仅仅取决于你调用这个计算时所给的输入,它还依赖外部的环境条件。比如读取文件时,文件可能不存在,可能没有权限。

优点

  • 引用透明
    你引用一个函数,这个函数的具体实现更改了之后,你是感觉不到的,它对你是透明的,因为对应函数式编程来说,它的函数都是一些纯函数,也就是他的输入输出是一对一的关系,你给固定的输入,它永远给你固定的输出,具体这个函数内部,它的实现有什么变化,你是感受不到的。
  • 容易分析
    因为它的行为总是固定的,固定的输入输出永远是固定的,所以比较容易分析。
  • 容易测试
    因为它的行为是固定的,是不会有任何变化,所以外部会更好的去测试。不像读写数据库之类的,如果是读写数据库的话,它是比较难测试的,因为它依赖于数据库的环境。
  • 性能优化
    因为给固定的输入,它的输出永远是固定的,所以适合对函数结构做缓存,如果缓存中存在该输入,可以直接返回缓存中计算的结果

缺点

   复杂度高,不容易上手:因为大量运用了一些函数,使用函数的组合来解决实际问题,使用组合函数的时候,会使用一些抽象程度更高的函数,去组合一些抽象程度低的函数。导致程序的复杂度非常高,不容易上手。

纯函数

结果仅依赖于参数,不访问外部变量,行为固定,固定的输入,输出永远是相同的

柯里化

1)概念:固定某些参数,得到一个接收剩余参数的函数
2)作用:复用参数,固定的参数之后调用不需要再传,直接调用
2)确定:可读性低,修改成功高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值