在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

为什么函数式编程没有流行起来?

  • 2009-03-02
  • 本文字数:1583 字

    阅读完需:约 5 分钟

函数式编程已经不是什么新概念了,而且在各个技术论坛和新闻网站上也时不时的挂起一阵函数式编程的旋风。但是对于很多编写应用程序的编程人员来说,函数式编程仍显得那么陌生和遥远。对此 Confusion 在 tweakblog.net 上发起了一场关于“为什么函数式编程语言没有流行起来”的大讨论。

Confusion 认为函数式编程语言之所以没有流行起来,原因是其文档及示例都显得过于复杂难懂,让人望而却步:

软件工程领域的一些权威对于函数编程(functional programming——FP)事实上不怎么流行深表遗憾。支持者这一观点的人通常责怪听众短视或其老板无能,认为不同意他们意见的人根本不懂函数式编程为何物。而这反过来却可能说明一点:他们没有给出恰当的解释。 我想限制 FP 语言被采用的实际原因是:真正吸引大家的是函数式编程语言的一些优点,但是这些优点并没有被很好地阐述和示例。同样,这些解释和样例在说服软件工程师方面显得非常失败,因为它们没有回答软件工程师们在日常工作中所关心的问题。

接着 Confusion 用一个有关定义 reduce 的例子进一步说明了这一点:

(reduce f x) nil = x
(reduce f x) (cons a l) = f a ((reduce f x) l) ……

这很抽象,多数人并不熟悉。可是,FP 语言的文档只包含了这类非常数学化的例子。难道没有人写一个用来证明 FP 强大功能的宠物店的例子吗?这才是我们大多数人的常规工作。

对于 Confusion 的这一看法,引来了众多读者的讨论,大家就这一问题纷纷发表了自己的看法。 RayNbow 对于 FP 例子过于抽象的看法就表达了不同意见:

斐波纳契数列(Fibonacci )的例子(还有阶乘)通常被用作说明语言语法的具体例子。因为函数式编程语言以函数为中心,还有什么更好的方法展示如何定义它们的么?你可以把斐波纳契数列和阶乘的例子看作函数世界的 Hello World。

Tubbie 认为 FP 的特长就在于计算方面,因此编写数据库或用户界面应用的程序员根本不需要使用它:

FP 支持者之所以展示计算例子,是因为 FP 擅长此道。问题是大多数程序员每天编写的大多数代码都是关于与数据库、用户界面等交互的,并不包含复杂的数学运算或算法。FP 语言是非常不同的的语言,如果只解决边界条件问题,就不需要学习它。

Dooievriend 非常赞同 Tubbie 的说法:

……我很喜欢函数式语言,它非常适合解决要解决复杂的运算问题。……但是关于用它来构建 GUI 并访问数据库,我没有任何思路。对我来说,只在复杂和经常变化的问题出现时,才会用到 FP,但它是嵌入到其他语言中使用。这是 FP 语言应被使用的方式,我至少知道 Mercury 是这么用的……

有不少人表示同意 Dooievriend 的这一说法,他们认为只有混合了命令式语言(imperative languages )与函数式语言(functional languages )才能做到两全其美。

就函数式语言没有很好的说明和例子这一说法,虽然 Morton 也表示同意,但是他并不认为 FP 没有流行起来:

……我没觉得 FP 不流行。我经常发现同事在代码中使用了函数模式,可是他们自己都没有意识到。现在也很难找到不支持 FP 的语言。在 Java 和.Net 都开始支持 FP 概念的时候,你们居然还担心 FP 不流行。

Alex 更是现身说法,说自己已经把函数式编程当作了“秘密武器”:

你的意思是还没人写出一篇能让人信服的说明函数编程好处的文章吗? …… 我和我的团队已经用 F#开发了一个稳定的、现实的、商用的业务应用,而且已经被大公司买走了。函数式编程最成功之处是,根据任务的特性,代码量可以减少 4 到 10 倍,对此我十分确信,因为我们用 F#重写了一些老代码,所写的代码也更加易于维护和扩展。 因此,它给了我们竞争优势。或许说服不了大多数人对我们来说是好事:),我们已经拥有这一秘密武器了。

虽然大家看法各不相同,但是有一点可以看得出来,函数式编程特长和优点是大家有目共睹的。你使用过函数式语言吗?对于函数式编程你有什么话要说呢?更多函数式编程信息请访问 InfoQ 中文网站的函数式编程专题

2009-03-02 23:316366
用户头像

发布了 150 篇内容, 共 54.0 次阅读, 收获喜欢 10 次。

关注

评论 1 条评论

发布
用户头像
错别字老让我分神,希望作者后面能改正一下
2022-04-19 18:39
回复
没有更多了
发现更多内容

基于YOLOv8的6种金属表面缺陷检测识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolov8

Fusion Studio 20 (macOS, Windows) 正式版发布 - 视觉特效、3D、VR 及动态图形解决方案

sysin

fusion

合合信息首批通过中国信通院文档图像篡改检测平台能力完备性测评

合合技术团队

人工智能 算法 #大数据

【HarmonyOS 5开发入门】DevEco Studio安装配置完全指南

颜颜yan_

鸿蒙 HarmonyOS NEXT Harmony5

WiFi万能钥匙鲲鹏服务器部署 TiDB 集群实战指南

TiDB 社区干货传送门

管理与运维 安装 & 部署 扩/缩容 应用适配

Alluxio Enterprise AI 3.6加速模型分发、优化checkpoint写入并增强多租户支持

Alluxio

AI 数据加速 模型分发

当 Layer2 走向应用链:Mint 构筑多元 NFT 生态

NFT Research

web3、

OpenTelemetry × Elastic Observability 系列(一):整体架构介绍

Se7en

水电站使用堡垒机必要性简单分析看这里!

行云管家

网络安全 堡垒机 运维安全

上海车展里的智能化风景

脑洞汽车

汽车

DistilQwen-ThoughtX:变长思维链推理模型,超越DeepSeek蒸馏模型

阿里云大数据AI技术

人工智能 数据分析 数据集 大模型 DistilQwen2.5

探索TiDB数据库:WordPress在分布式数据库上的部署实践

TiDB 社区干货传送门

TiDB第四届征文-运维开发之旅

从需求到复盘,领歌如何驱动银行经营贷项目全流程敏捷落地?

云端拾光

团队协作 敏捷工具 看板工具

夏日清凉守护:百度携手美的启动“安心维保计划”

极客天地

中国智能化汽车的三次出海

脑洞汽车

AI

科学智能赋能空间科学研究(2):AI4S 范式下空间科学实验的核心挑战

ModelWhale

人工智能 科学智能 AI4S 空间应用中心

HarmonyOS实战:腾讯IM之聊天详情页面搭建(二)

IT小码哥

harmoyos 鸿蒙 os

【等保小知识】二级等保费用高还是三级高?为什么?

行云管家

网络安全 信息安全 等保 等保测评

从这五个模块梳理产品生产流程,再也不怕生产一团糟了!

积木链小链

数字化转型 智能制造 生产管理

硬核出击,国产化根技术能力拉满!

天翼云开发者社区

云计算 天翼云 天翼云服务器

DaVinci Resolve Studio 20 (macOS, Windows) 正式版发布 - 剪辑、调色、特效和音频后期制作

sysin

DaVinci Resolve Studio

SonarQube Server 2025 Release 3 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具

sysin

SonarQube

开源之夏火热报名中,开放原子“校源行”鼎力支持龙蜥社区开源项目

OpenAnolis小助手

操作系统 龙蜥社区 开源之夏

签约快讯|天润融通签约春风动力

天润融通

拥抱AIⅹData 新时代:构建企业新一代AI基础设施,重塑企业核心竞争力

星环科技

数据 基础设施建设 AI 大底座

特斯拉,步子很大路很滑

脑洞汽车

AI 汽车

AI时代不堆人力,天润融通Agent正在全面接管家电服务!

天润融通

华硕618狂欢!专业显示器超值购,打造你的专属创作视觉利器!

新消费日报

汽车发布会,到底该不该讲技术?

脑洞汽车

AI

为什么函数式编程没有流行起来?_Java_宋玮_InfoQ精选文章