没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:龚雪|2015-01-06 09:49:02.000|阅读 435 次
概述:函数式编程应该是你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 http://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 ,让我们从现在开始吧!
转载请注明:文章转载自:慧都控件网 及英文出处:medium.com
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
Parasoft Virtualize通过智能变更顾问、自动化工作流和全面版本控制三大核心功能,为企业提供了高效的虚拟化测试环境管理方案。它不仅大幅降低了维护成本和工作量,还确保了虚拟服务与真实环境的实时同步,显著提升了测试效率和可靠性。
Parasoft SOAtest凭借其精准消息推送、智能监听和高效依赖隔离的能力,为响应式微服务架构的测试提供了强有力的支持。它不仅解决了异步通信复杂、依赖服务多等测试难题,还通过模拟真实场景和简化测试环境,显著提升了测试效率和覆盖率。
作为一款面向全组织的CAD文件可视化与交互软件,SpinFire Insight支持多种主流2D和3D CAD格式,无需单独购买繁杂的CAD软件授权,即可实现对CAD模型的统一查看、分析和沟通,让企业内部及外部团队之间的跨部门、跨公司协作更加顺畅高效。
用于创建、存储和传输文档的 FastReport 产品线已通过新的开发进行了扩展。自 2025 年 5 月起,该产品线包含 Cloud、Corporate Server 和 Publisher 等产品。在本文中,我们将详细介绍这些服务如何满足不同的用户需求,以便您选择最符合您需求的解决方案。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号