RxJava2.x 学习笔记(一)函数式编程

319 阅读2分钟

函数式编程

介绍

编程语言有量大流派,命令式(imperative)和函数式(functional).

命令式编程语言(比如C, C++, Java, Python等),通过给计算机一系列指令来完成任务,和这些指令配合的是数据的变化,比如声明一个变量a=5,稍后做一些操作,这个a会变成6或者其他值。你可以通过控制指令执行逻辑和流程来完成这样的操作,得到结果。这个过程和计算机本身的设计比较接近。 当代计算机是冯诺伊曼结构的,基于CPU+内存+总线的结构构建整个计算本身。

在纯函数的语言中,你并不是告诉计算机一步一步的指令,而是告诉计算机如何计算。比如说,计算n的阶乘,在纯函数中,描述是n的阶乘=n*n-1的阶乘。

你不能改变一个变量的值,因为你已经声明了a=5,a就是5,无法改变;事实上,在纯函数中,根本就没有变量这个概念。

在纯函数语言中,函数是没有副作用的,对于相同的输入参数,纯函数保证会有相同的输出。

以haskell为例

haskell函数定义的格式

函数名 :: 参数1的类型 -> 参数2的类型 -> ... -> 结果的类型
函数名 参数1 参数2 .. = 函数体

add :: Int -> Int -> Int
add a b = a + b

是不是很类似数学公式:f(x,y)=x+y; 是的,函数式编程语言起源于数学。

lambda表达式

λ表达式是书写函数的一种方式,如下所示:

函数名 :: 参数1的类型 -> 参数2的类型 -> ... -> 结果的类型
函数名 = \参数1 ->  \参数2 -> ... -> 函数体

add :: Int -> Int -> Int
add = \a -> \b -> a + b

--简化写法
add = \a b -> a + b  

map

数据转换

monand

深入学习的参考材料

待续