我最近看到很多关于函数式编程的知识,而Clojure看起来特别有趣。虽然我“理解”它的基本描述,但是如果我可以的话,我无法弄清楚如何在日常工作中使用它作为Web开发人员。我所阅读的很多内容都集中在函数式编程的数学方面,而不是常规OO中的典型编程情况。
我得到了错误的结尾吗?函数式编程与Web开发完全无关吗?如果没有,是否有任何“用于网络”的例子?
答案 0 :(得分:61)
功能编程很好地匹配Web应用程序。 Web应用程序接收HTTP请求并生成HTML结果。这可以被视为从请求到页面的功能。
与桌面应用相比,我们通常有一个长时间运行的流程,有状态的用户界面和数据流在多个方向。这更适合关注具有状态和消息传递的对象的OO。
答案 1 :(得分:29)
我头顶的几个例子:
答案 2 :(得分:20)
我不明白为什么不这样做 - 只要您向浏览器提供符合标准的HTML,他们就不关心您用来制作它的东西,无论是功能语言,命令式语言还是训练有素的猴子
答案 3 :(得分:20)
纯函数式编程可能无法很好地映射到Web编程环境中。但主要障碍是缺乏基础设施(框架和API)。在功能语言拥有与Java,Python或Ruby一样丰富的Web编程环境之前,这将是一段很长的时间(可能永远不会,老实说)。
那就是说,有一些选择。
我对这些中没有任何经验。也许评论者可以权衡一下对他们有用的东西。
答案 4 :(得分:15)
Twitter rewrote their backend in Scala,一种支持面向对象和功能范例的JVM语言。
此外,Lift Web框架是用Scala编写的。
答案 5 :(得分:4)
对于Clojure,有一个有趣的创业公司(TheDeadline)使用Clojure和Google App Engine开发。他们在Slideshare上有一个很好的ppt,并在InfoQ上接受采访。
关于使用GAE部署Clojure的一个很好的讨论: http://news.ycombinator.com/item?id=1239788
据我所知,Clojure有一些Web开发库。 的Compojure 环 变出
希望这能回答你的一些问题=)(我刚开始......)
最佳, 莱恩
答案 6 :(得分:3)
这与网络开发并不完全无关。坐在服务器上的应用程序可以很好地利用闭包,高阶函数,不变性,引用透明等功能特性......例如,您确定需要以任何方式转换或操作的集合。功能编程在这里有所帮助,这也是因为它的成语正在渗透主流语言。 功能特性有助于简洁,可测试性,并行化,并且它们还可以为您使用模式解决的问题提供本机解决方案。
更新:还有功能语言的Web框架。用于Common Lisp的Weblocks,用于Scala的提升。这些是我听说过的,可能还有更多...但是你不一定非必须是纯粹的功能 - 例如Scala不是纯粹的,应该适用于任何Java框架,你仍然可以为业务层等使用函数式编程
答案 7 :(得分:3)
结帐Ur/Web。它非常快,它的静态类型系统知道像HTML和SQL这样的东西,所以它可以保证各种关于安全性的好东西。
答案 8 :(得分:3)
Erlang似乎在可扩展的Web应用程序的某些基础架构中得到了大量使用。 CouchDB和Riak数据库主要用Erlang编写,RabbitMQ消息队列服务器也是如此。它成功的关键之一是它通过消息传递处理并发,没有共享的可变状态。正是这种思考问题的方式比任何特定的函数式编程语言更有用。
或者,看看MapReduce。这是一种非常实用的查看计算方式,即使你的map和reduce函数恰好是内部有状态的 - 因此,它非常适合以容错,分布式方式查询大型数据集。
无论如何,请选择对您来说最实用的东西。但是总是把功能性编程放在脑海中,因为你永远不知道什么时候会派上用场。
答案 9 :(得分:2)
他们正在为网络做一些pretty cool things at Edinburgh University功能编程。
答案 10 :(得分:2)
以下是使用Haskell构建网络应用的Web开发人员体验。尽管函数式语言非常类型安全并具有良好的并发性,但它们始终缺乏最佳的api,因为它长期以来一直是学术界的宠儿,但却在现实世界中得到强烈的支持。我希望它不会太遥远。 Erlang已经进入了它。
答案 11 :(得分:2)
语言和范例对于网络应用无关紧要,它们都同样好坏。如果您正在寻找学习新范例的理由,请深入了解。我的建议是分析您尝试解决的问题并选择合适的工具集。
答案 12 :(得分:2)
Javascript(网络的FE部分的语言,以及越来越多的BE)本身并不功能,但功能是一阶功能
答案 13 :(得分:2)
答案 14 :(得分:1)
函数式编程在Web编程中很受欢迎的原因在于它表示共享和改变状态,并允许程序员将纯函数部分表示为纯函数。纯函数具有并行运行非常简单的优点 - 因为它们没有副作用。
至少这是我的理由。
答案 15 :(得分:1)
功能语言可能无法直接用于构建优秀的应用程序,但我们大量使用函数式编程范例来构建我们的应用程序。纯函数式编程提出了“无副作用”的约束。这可以确保纯函数调用在调用它们的顺序时产生相同的结果。这对于Web开发来说并不理想,但如果将函数式编程与状态变化系统相结合,则可以构建强大的Web应用程序。有关详细信息,请查看我的论文:FAST Server 还有这些slides。
答案 16 :(得分:1)
另一个简短的回答:http://www.mlstate.com - 基于FP的完整Web开发平台。语言的干净语义允许各种自动化安全和安全分析,优化等。
警告:我在那里工作。答案 17 :(得分:0)
是的,由于可以使用任何语言进行功能编程,因此您可以每天将其用作Web开发人员。
可以吗?这取决于您要解决的问题。函数式编程是一种编程范例,应在哪里使用取决于您要解决的问题。
要使决策更简单,请考虑使用OOP概念是否更容易解决某些问题,在这些概念中封装,多态,继承等特性可以使您的生活更轻松?
如果是,请不要在那里进行功能编程,而只需使用OOP。 如果您的应用程序要执行复杂的计算/计算/业务逻辑并涉及大量并发处理,那么在这种情况下,函数式编程可以提供许多工具和优势。
这些只是构建程序结构和元素的风格不同,因此,这全都在于使用正确的工具完成正确的工作。休息任何事情都可以使用任何东西完成。
网络开发中的功能编程:
JavaScript支持函数式编程,当我们处于Web开发环境中时,它非常支持。反应框架受函数式编程原理的影响很大,并在许多Web应用程序中使用。
此外,您还可以找到许多使用以下功能编程语言开发的框架构建和运行的Web应用程序:
•WebSharper(F#)
•Snap(Haskell)
•提升(斯卡拉)
•Ocsigen(OCaml)
•芝加哥Boss,Zotonic(erLang)
希望我的回答会帮助任何人。
答案 18 :(得分:-2)
您可能不会使用它,不应该使用它,但是当您说某人总是会发现规则的异常时(Viaweb等)。基本上没有“超级语言”只有代码的工作线,通常在“Blub”中。即使是保罗·格雷厄姆(Paul Graham)说,Lisp的主要(实际上只有)好处是能够快速制作原型的能力。
“超级语言”通常会影响而不是提高代码的可读性,这意味着编写代码的“天才”必须永远保持它,因为没有其他人能够理解它,特别是因为他很可能用自己的方式来编写代码。修改后的方言。这减少了任何项目的可能范围,这意味着即使可以完成新的创新事物,它们也是不可扩展的,因此保持相对较小的规模(如Arc中的Hacker News)。
这并不是说有人不能拥有一个天才的想法,并以一种难以理解的风格实现它,然后可以在Blub重写并扩展,以便许多人可以从中受益。实际上,这正是所有Lisp成功故事中发生的事情,更不用说每一位曾经生活过的着名哲学家。但是,当然,如果你是一个“天才”,你也可以通过其他方式对产品进行原型设计。
对于JVM上的FP,可能有限但很酷。虽然我个人只会将它用于原型设计,但您可能有一个用例(通常与多线程有关),它可以提供一些改进。