我最近在函数式编程方面见过很多,Clojure看起来特别有趣。尽管我“理解”了它的基本描述,但我完全不知道自己将如何作为Web开发人员每天使用。我读过的很多书都集中在函数式编程的数学方面,而不是常规OO中常见的编程情况。
我的手杖弄错了吗?函数式编程是否与Web开发完全无关?如果没有,是否有“将其用于网络”的示例?
Answers:
纯函数式编程可能无法很好地映射到Web编程环境中。但是主要的障碍只是缺乏基础架构(框架和API)。功能语言要拥有像Java,Python或Ruby一样丰富的Web编程环境,这将需要很长时间(可能永远不会)。
也就是说,有一些选择。
我没有任何经验。也许评论者可以权衡哪些对他们有效。
Twitter用Scala(一种同时支持面向对象和功能范例的JVM语言)重写了后端。
而且,Lift Web框架是用Scala编写的。
对于Clojure,有一个有趣的创业公司(TheDeadline),它是使用Clojure和Google App Engine开发的。他们对Slideshare的评价很高,对InfoQ的采访也不错。
有关使用GAE部署Clojure的良好讨论,请访问:http : //news.ycombinator.com/item? id= 1239788
据我所知,Clojure有一些Web开发库。Compojure戒指召唤
希望这能回答您的一些问题=)(我也刚开始..)
最好,瑞安
它并非与Web开发完全无关。坐在服务器上的应用程序可以很好地利用闭包,高阶函数,不变性,参照透明性等功能,例如,您肯定需要以任何方式转换或操作集合。函数式编程在这里有所帮助,并且其成语正在渗透主流语言是有原因的。功能特性有助于简洁,可测试性,并行化,它们还可以提供本机解决方案,以解决您可能会使用模式解决的问题。
更新:也有用于功能语言的Web框架。Weblocks用于Common Lisp,Lift用于Scala。这些是我听说过的,可能还有更多……但是您不一定必须是纯粹的功能性-例如Scala不是纯粹的,应该与任何Java框架一起使用,您仍然可以将功能性编程用于业务层等
我们刚刚启动了一个在线电子表格,其中后端完全用Erlang编写。
从任何标准来看,这都是您可以使用具有复杂性的巨大GUI构建的最复杂的Web应用程序之一。
另一个简短的答案:http : //www.mlstate.com-基于FP的完整的Web开发平台。语言的简洁语义允许进行各种自动化的安全性和安全性分析,优化等。
警告:我在那里工作。
函数式语言可能对构建出色的应用程序不是直接有用的,但是我们在构建应用程序时大量使用了函数式编程范例。纯函数式编程提出了“无副作用”的约束。这样可以确保纯函数调用按调用顺序产生相同的结果。对于Web开发而言,这不是理想的选择,但是如果将功能编程与状态更改系统结合使用,则可以构建强大的Web应用程序。请查看我的文章以获取更多详细信息:FAST Server 以及这些幻灯片。
是的,因为可以使用任何语言进行功能编程,所以您可以每天将其用作Web开发人员。
你应该?这取决于您要解决的问题。函数式编程是一种编程范例,应在哪里使用取决于您要解决的问题。
为了使决策更简单,请考虑使用OOP概念是否更容易解决某些问题,在这些概念中封装,多态,继承等特性可以使您的生活更轻松?
如果是,则不要在那里进行功能编程,而只需使用OOP。如果您的应用程序要执行复杂的计算/计算/业务逻辑并涉及大量并发处理,那么在这种情况下,函数式编程可以提供许多工具和优势。
这些只是构建程序的结构和元素的不同样式,因此,使用正确的工具完成正确的工作就可以了。
Web开发中的函数式编程:
JavaScript支持函数式编程,当我们处于Web开发环境中时,它非常有帮助.React框架在很大程度上受到函数式编程原理的影响,并在许多Web应用程序中使用。
此外,您会发现许多Web应用程序是使用以下功能编程语言开发的框架构建和运行的:
•WebSharper(F#)
•Snap(Haskell)
•升降机(斯卡拉)
•Ocsigen(OCaml)
•芝加哥老板,佐顿(erLang)
希望所以我的答案会帮助任何人。
您可能不会使用它,也不应该使用它,但是当您说某人总是会发现该规则的异常(Viaweb等)时。基本上没有“超级语言”,只有工作代码行,通常在“ Blub”中。甚至Paul Graham都说,Lisp的主要(实际上只是)好处是一个人快速原型制作的能力。
同样,“超级语言”通常会影响而不是提高代码的可读性,这意味着编写此“天才”的那个“天才”必须永远维护它,因为其他人都无法理解它,尤其是因为他很可能以自己的修改后的方言来编写它。这减少了任何项目的可能范围,这意味着即使可以完成新的创新工作,它们也无法扩展,因此规模相对较小(例如Arctic中的Hacker News)。
这并不是说某人无法拥有一个天才的想法,而无法以一种难以理解的风格来实施它,然后可以用Blub重写并扩展它,以便许多人可以从中受益。实际上,这就是所有Lisp成功案例中发生的事情,更不用说曾经生活过的每个著名哲学家。但是,当然,如果您是“天才”,您也许还可以通过其他方式对产品进行原型制作。
对于JVM上的FP,可能有有限但很酷的事情。尽管我个人仅将其用于原型制作,但您可能会有一个用例(通常与多线程有关),在此方面有所改进。