我确信当涉及需要大量计算的应用程序(数据挖掘,AI,nlp等)时,函数式编程是一个很好的选择。
但是对于典型的企业应用程序使用函数式编程是否明智呢?在这些应用程序中存在大量业务规则但计算方面并不多?
请忽略这样一个事实,即使用函数式编程的人很少,而且很难。
由于
答案 0 :(得分:2)
像Clojure和Scala这样的函数式编程语言几乎可以用于任何事情。至于Haskell,经验丰富的Haskell编程可能能够用任何语言替换Haskell来解决任何问题 - 高效与否。我不知道是否有一种函数式编程语言可以考虑/最好/在所有语言中针对这个特定问题,但请放心将工作并且非常好。
此外,Clojure和Scala是在JVM上实现的。从技术上讲,他们/是/在企业平台上。
答案 1 :(得分:2)
但是对于典型的企业应用程序使用函数式编程是否明智呢?在这些应用程序中存在大量业务规则但计算方面并不多?
业务规则只是计算,您通常可以使用函数式编程更简洁明了地表达它们。
越来越多的企业应用程序是用函数式语言编写的。 Citrix XenDesktop和XenServer基于主要在OCaml中编写的工具堆栈构建。 MyLife人物搜索引擎是用OCaml编写的。我们是一家小公司,但我们所有的LOB软件(例如信用卡交易,账户,网站分析)都是用F#编写的。微软在Bing上的广告使用F#代码。也许最明显的例子是使用最新版本的C#和.NET的人,因为他们几乎肯定使用功能概念(例如委托)。
如果你的意思是更奇特的功能语言,如Clojure,Scala和Haskell,那么我相信有些人正在使用它们,但我自己没有任何细节。
答案 2 :(得分:1)
如果不是功能,什么是业务规则?规则的应用可以表示为将函数应用于一组数据。它也可以与多态性结合。例如通过泛型函数(多个调度也可以很方便)和继承。
代码是数据,数据是代码,两者都应该像水一样。
答案 3 :(得分:1)
一年多以前,我深入研究了Haskell,并尝试了一些我认为是典型业务问题的事情(说白了,给出了一些值,正确的响应是什么?)。因此,我想说,是的,您应该能够使用函数式编程来模拟许多业务问题。
就我个人而言,我无法在Haskell中找到与C#一样推动OO +功能方法的相同显而易见性,但这很可能是因为我对Haskell做了很多工作,而C#也做得不多。 / p>
然后就是如何与顾客沟通。我的经验是,他们中的许多人严格按时间顺序思考,哪种方式有利于命令式编程。即使进入状态变化等模型,您也可能失去奇怪的客户。对可能代表业务时间顺序运作的功能组合和单子进行思考可能超出许多客户。
无论哪种方式,您都可以找到我的业务示例here。
答案 4 :(得分:1)
从我所看到的,Scala看起来像处理普通Java就好了。因此,Java可以处理业务的任何事情,Scala也可以。
在.NET方面,F#是功能语言的另一个很好的例子,适用于“业务”应用程序。简单地说,F#可以做C#所能做的一切,而且更容易。
但是对于这两种语言而言,“大型编程”方面倾向于借用OOP。并不是说混合东西有什么不妥,但也许这不是你问的问题。如果你想坚持使用更实用的方法,并且说不使用对象,你可能会遇到一些麻烦,因为工具支持不会在同一级别上。使用易于与.NET / Java集成的语言,这不是一个大问题。
“这是明智的吗?”:这取决于项目,公司和其他环境因素。似乎一个常见的“企业模式”是代码必须非常愚蠢,以便任何人都可以使用它。在这种情况下,您可能会让参与其中的人认为使用lambda会让其他人难以理解。
答案 5 :(得分:0)
我假设当你谈论很多业务规则时,你正在考虑应用程序开发。应用程序开发,就像您想要模拟真实世界的工作流程一样。与vanilla编程不同,应用程序开发涉及更高级别的责任(特别是对于需求捕获和测试)。如果是这样,我强烈建议你看看你是否可以应用域驱动的开发。域驱动开发的自然选择是面向对象的方法。这和许多程序员在面向对象编程方面都很不错的事实是其在应用程序开发中流行的一个原因。但是,这并不意味着现实世界的大型项目总是以这种方式编写(阅读http://www.paulgraham.com/avg.html)。
答案 6 :(得分:0)
您可能希望查看iTasks system,它是功能语言Clean的库,其设计完全是为了表达工作流程和业务流程。