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