浅谈函数式编程

在这里插入图片描述

函数式编程,维基百科:https://en.wikipedia.org/wiki/Functional_programming
函数式编程初探,阮一峰:http://www.ruanyifeng.com/blog/2012/04/functional_programming.html

函数式编程(Functional programming),把计算作为一种数学意义上的函数,避免改变状态以及使用可变的对象或数据,是一种编程范式(Programming paradigms)。
编程范式是指计算机程序结构和元素的构建方法。我们熟知的过程式(Procedural programming)编程和面向对象式(Object-Oriented Programming, OOP)编程,也都属于特定的编程范式。

过程式编程和面向对象式编程在大类上属于命令式编程(Imperative programing)。与命令式编程相对的是声明式编程(Declarative programming),函数式编程就属于声明式编程。

函数式编程的几个要点

  1. 函数是第一等公民 (1st class citizen)
    所谓第一等公民,是指函数这个类型同其他基本的类型,如整型、浮点型、字符串、布尔型等,地位类似,都可以作为函数的输入或输出,都是第一等的公民。
    函数的参数可以接受函数类型,参数包含有函数类型的函数为高阶函数。
  2. 函数是数学意义上的函数,要 “纯”,没有副作用(Side effect )
    • 引用透明(Referential transparency):函数只依赖输入的参数,不依赖于外部变量或"状态"。任何时候任何情况下,相同输入,相同输出。
    • 只使用声明式的形式:只使用声明和表达式(expression),不用语句(statement)。前者表示一种计算过程,不涉及内存读写或I/O操作,计算完即返回,而不管返回值如何用;后者语句表示一种操作的完整过程(如赋值语句、I/O操作),无返回值等状态。

正式因为函数式的这种“纯”的特性,使其程序间的依赖性大大降低,可以很好地适用于线程间并发、进程并行和分布式并行计算。

其他常见的若干点

  • 函数柯里化(Currying)
    将一个接受多个参数的函数,转化为一条函数链,链中的每个函数只接受一个参数。
    如,scala 语言示例:
// common add function receive two arguments
def add(x: Int, y: Int): Int = { return x + y }
add(1, 2)  //3
// currying
def add(x: Int) = { (y: Int) => x + y }
val addOne = add(1)
addOne(2)	// 3
val adder = add(_)(_) // or add _
adder(1)(2)  // 3
  • 延迟求值(Lazy evaluation)
    相对于立即求值,延迟求值是指等到使用的时候才计算对应表达式的值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值