提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:龚雪|2015-01-06 09:49:02.000|阅读 417 次
概述:函数式编程应该是你2015年的最优先选择:2015年是Functional Programming(函数式编程应)重生之后的重要一年。被遗忘60年后,现在,他又流行起来。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
你可能听过 "Clojure", "Scala", "Erlang" or even "Java now has lambdas"这些词语。你也可能知道这些词语"函数式编程"有关。如果你有逛编程论坛,那么这个东西,你应该经常见到。
如果Google搜索" Functional Programming",你找不到什么新东西。曾经第二大语言拥抱他,出现在上世纪50你年代,被命名为Lisp。那么,为什么现在才流行呢?
信不信由你,以前电脑比DOM运行还慢好多。在那个时候,主要有两种设计习惯和编程语言:
那时候的电脑没办法处理抽象对象求函数程序值。因此,由于不适合工作,Lisp以慢慢死亡收场。然后,命令式编程开始了它的统治,特别是C的崛起。
现在,电脑跑大多数程序已经没有压力,无需在意他使用什么语言。然后,函数式编程语言重生。
你可以这样理解函数式编程语言:用函数编程,但让,事实上,比想象中还要更加接近字面意思。你可以使用其他函数标准创建函数,编写函数。
这里有一个(简单)的FP特性列表
你也许不会再以他的中文翻译,但是,你会在意他们到底是什么意思。
First-Class Functions:可以在变量中存储函数。我想你已经做过如下面 JavaScript的内容。
var add = function(a, b){ return a + b }
你现在正在存储一个匿名函数,得到a,b,以及返回a+b到add变量。
High-Order Functions:函数可以返回函数,像参数一样接收函其他数。
JavaScript:
document.querySelector('#button') .addEventListener('click', function(){ alert('yay, i got clicked') })
或者
var add = function(a){ return function(b){ return a + b } } var add2 = add(2) add2(3) // => 5
上面两个例子都是High-Order Functions例子,尽管,你可能从未谢过如此代码,你也可能在某个地方见过这种格式。
Pure Functions:函数不改变值,值接收数据和输出数据,和数学运算函数相似。这也意味着,如果为函数f传递2,并返回10,他将会返回10.跟环境、线程、或其他求值命令无关。在其他编程中也不会受影响,非常有用。
Closures:可以在使用的特殊返回函数中保存一些数据,比如返回函数保持执行环境。
var add = function(a){ return function(b){ return a + b } } var add2 = add(2) add2(3) // => 5
High-Order函数的第二个例子中,变量a是封闭的,只能用于返回函数。事实上,闭包并不是FP特色,只是优化。
Immutable State:无法改变任何状态(即使可以新建也不行),在下面的例子(in OCaml),使用x和5在项目中交换。x永远等于5。
let x = 5;; x = 6;; print_int x;; (* prints 5 *)
看起来并不是好功能,不过关键时候可以救命。
分布式、并发应用程序的时代终于来临了。不过,我们还没准备好:我们现在的(比如:使用的)并行模型,虽然可以解决问题,却带来复杂性。
得到一个更好的应用,我们需要一个更简单、可靠的方式来实现。记得我们上面提到的几种功能吗?Pure Functions 和 Immutable State?诚然,你可以在不同核心或者机器上运行无数次函数,你只能得到相同的输出结果。因此,你可以使用相同的代码,在1个核心上使用,也可以在1000个核心上使用。
"但是为什么我不能继续使用OOP ?"
万事开头难。我想你学习编程付出了很大的努力,甚至还在学习OOP。也许,现在的你使用OOP比你刚开始学习编程的时候简单多了。为什么呢?因为你已经熟悉许多常用语了,比如变量声明、 for/while 循环。
对于刚开始学习FP的人,就想是重新学习编程一样(取决于你开始学习哪种语言,从哪里开始)。
许多人说,FP可读性不好。如果你有学习过规则的背景,函数式编程看起来就像个crypt语言,并不是因为他是crypt,而是你并不熟悉那些常用语。当你掌握基础之后,他的可读性就增强了。
来看看下面的Haskell 和 JavaScript 代码:
guess :: Int -> [Char] guess 7 = "Much 7 very wow." guess x = "Ooops, try again." -- strongly inspired by //learnyouahaskell.com
function guess(x){ if(x == 7){ return "Much 7 very wow." } else { return "Oops, try again." } }
这是一个很简单的程序。当你正确输入7后会输出一个贺词,不然会输出错误信息提示。
Haskell可以使用2行代码完成是怎样做到的(忽略第一行)。如果你理解了Pattern Matching(匹配模式),这个问题就非常简单了。
Haskell 做了些什么:
如果函数接收内容等于7,他返回"Much 7 very wow",否在返回"Ooops, try again."。
这就是JavaScript代码做的事情,Haskell匹配编程者提供的"模式"。
plus1 :: [Int] -> [Int] plus1 [] = [] plus1 (x:xs) = x + 1 : plus1 xs -- plus1 [0,1,2,3] -- > [1,2,3,4]
在上面的程序中,plus1是一个得到Ints列表的函数。为每个元素添加1。与空List []匹配(没有其他匹配,返回另一个空列表)。通过定义模式来确认非空列表:为列表中第一个元素命名为x,剩下的为xs。然后用求和和递归调用返回。
我可以肯定,你在使用这两行Imperative Style代码重写 plus1 的时候胡出现错误。不过他依旧有可读性。
那么,新的一年,Functional Programming ,让我们从现在开始吧!
转载请注明:文章转载自:慧都控件网 及英文出处:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
CEETRON Envision是一款功能强大的CAE数据分析与可视化工具包,凭借其卓越的数据提取、分析、渲染能力,能够帮助工程师和开发人员提升分析效率、改善工作流程,并通过高效的数据共享报告和生成功能,进一步优化团队协作与决策过程。
Burp Suite是一款专业的Web应用安全测试工具,集成了Proxy、Scanner、Intruder等功能,帮助渗透测试人员识别和修复Web应用中的安全漏洞,是提升Web应用安全性和防护能力的必备利器。
2024年对于FastReport来说是充满挑战和收获的一年。FastReport在多个领域取得了重要突破和创新成果,不仅不断优化现有产品,
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢