..
简介
函数编程(FP)是一种编程范式替代传统(结构或命令式编程和面向对象编程)发明的,被誉为“演算”的阿隆索会在30年,之前它被称为是究竟这是什么电脑。
教会担任研究为编程语言Lisp的发展的基础,然后他们几乎完全放弃了,因为他们声称的命令式编程的计算机生成与帕斯卡尔,C基本和,今天的现代C + +和Java。
该演算的基本思路是,计算机程序可以表达,而不是一个强制性的指令集(这样做,那么这样做,那么这样做),用一系列的功能,其参数是相同的号码功能。
一个功能程序通常是由一个函数作为输入另一个函数作为输入另一个函数,等等。
这意味着,虽然传统节目,在必要的范式或对象写的,一个命令的变量,其值代表“国家”的计划包括一系列的行为,在变函数式编程的概念不存在(有没有“国家”的概念)和委托执行的功能,在恒定的功能操作的数量。
功能性语言中已经失去了兴趣随着时间的推移有几个原因,最主要的是学习困难(通常认为一个人,而不是功能的对象,除非他是一个数学家!)而寻找困难高效的翻译或编译器。
Ruby和FP
如今,这种兴趣已经觉醒,但是,因为功能性编程与它带来了非常有价值的后果:它可以通过定义,导致在运行时没有错误。 换句话说,在编译时或第一次不是它的工作原理或不能正常工作。 无法预期的行为,在没有先验(在功能方案,其实是没有例外的概念)的方法。
因此,出生和蓬勃发展的一些功能性语言,如(或多或少纯洁,或多或少对传统的编程支持):ML / OCaml的 , 哈斯克尔 , F# 。
Ruby 是不是一个函数式语言,但使用功能的编程技术,可以帮助我们制定更多的合成算法,更有力,更有效。 除此之外,通常情况下,更易于阅读。
每个和地图
该语言以某种方式支持FP第一个特点,就是在你的标准库迭代器的功能。 例如:
$元素= [1,2,3,4,5]
Elementi.map $ {| ELEM |放ELEM} + 1
的职能“地图”和“每一个”红宝石无非应用FP!
事实上有函数作为参数等功能。
在Ruby中,那么,对代码中{}之间或匿名函数做/结束封闭块的部分是专门为主题的多种功能。
在这些功能被称为FP 高阶功能,认为只要采取多种功能,即输入功能。
尤其是“图”作为一个古典和数学函数的行为可以理解为如下:对于每一个从一到五个系列的元素 ,运行功能:打印下一个自然数。
这“地图”或“联营公司”,为每一个集合元素(一个在Ruby中数组我们会说)有一定的功能块中的定义。
同样的事情会发生自然的:
$ Elementi.each {...}
封路措施:进程内和lambda
该闭包的概念类似于高阶功能:能够显着的变量定义上,从上下文中的功能(如全局变量或其他功能的变量),不同的生活行为的功能。
在Ruby中,我可以写一个封闭使用,可以用关键字Proc.new或 lambda定义的匿名函数。
下面是一个例子:
高清乘法(乘数)
返回的lambda {| N | N *倍数}
年底
per3 =乘法(3)
per3.call放(3)#=> 9
放per3.call(per8.call(2))#=> 48
不完全是不言而喻的,在这个例子中我定义了一个函数“乘法”。
有什么好奇怪这个功能?
在这里,我根本不使用任何变量!
参数不是一个变量是一个简单的乘数为常数或其他功能的占位符。
但是,在传统的编程,我会写:
DEF乘法(A,B)
返回A * B
年底
放乘法(3.3)
可以看出,不过,我定义了一个封闭使用“操作员”我叫per3,它定义了所有的乘法“X3”的行为。
然后,我把这个运营商的号码3。
我也可以称之为递归!
或者调用它,而不是一个常数,在另一功能。
在传统的编程,但是,我不得不提前确定了在交易涉及的变量数量 - 从而限制了两个数相乘 - 以及最重要的,我要插入一个国家的概念,分配的两个变量内存包含要乘以值。