网易首页 > 网易号 > 正文 申请入驻

Laravel程序员花3天重构1个函数

0
分享至


一个 burnout 的开发者,在凌晨三点盯着屏幕上的 14 行代码,突然意识到:自己不是为了解决业务问题,而是在证明某种编程范式「可以这么写」。这大概就是函数式编程最隐蔽的陷阱——它承诺让你写出更优雅的代码,却从不告诉你优雅是有利息的。

从「能跑就行」到「必须优雅」

故事的主角是个 Laravel 开发者,原本写了一个简单粗暴的 tryPartial 函数:传入模板名称和参数数组,返回渲染好的 HTML 字符串。代码不长,逻辑直白,业务方用了两年没出过问题。

但某天他读了篇关于函数式编程的文章,突然看自己的代码不顺眼了。那个硬编码的 $args = [] 默认参数,那个提前执行调用的 $callable($args),在他眼里变成了「不够函数式」的原罪。

于是他动手重构。第一步是把参数默认值从空数组改成 null,这样可以区分「没传参数」和「传了空数组」两种情况。第二步更关键:他让 tryPartial 支持柯里化(currying,即把多参数函数拆成单参数链式调用)——如果只传模板名,返回一个包裹在 Result 类型里的偏函数;如果同时传了参数,再用 ap 方法把数据「应用」进去。

新代码用了 mapapResult 这些 Monad 世界的黑话,行数没变少,理解成本却指数级上升。

原版的 tryPartial 是个老实干活的工具函数;新版则像个需要说明书才能启动的精密仪器。


Monad 的诱惑与代价

这里需要解释下 Result 是什么。在函数式编程里,它是一种「容器类型」,用来包裹可能成功也可能失败的操作结果,避免抛异常破坏函数纯度。听起来很美——直到你发现每个操作都要拆成 mapflatMapap 的俄罗斯套娃。

作者的原话是:「Where I realized if tryPartial was curried I could return the Result which would contain the functional component and then I could use ap on the Result to apply the data」。这句话的语法结构本身,就是函数式编程认知负荷的绝佳标本。

更微妙的是动机。作者在文章开头坦承自己 burnout 了,「从未想过当程序员」却困在这行。这种状态下,代码重构很容易变成逃避现实的出口——业务需求令人疲惫,但「把代码写得更优雅」能带来即时的掌控感和道德优越感。

Laravel 社区有个老梗:「你写 PHP 的,装什么 Haskell」。话糙理不糙。PHP 的 arraycallable 是动态类型的野孩子,硬要套上 Haskell 的紧身衣,缝缝补补的地方比优雅的地方多。

技术债的另一种形态

这次重构没有解决任何用户投诉,没有提升渲染性能,没有减少 bug。它解决的是作者心里的一个痒点:「这个函数不够函数式」。


两年后的某个深夜,接手这段代码的新人会盯着 fn(array $args) => Str::of($callable($args)) 这行匿名函数套匿名函数的嵌套,怀疑前任是不是在故意炫技。而作者本人,大概早已离开这家公司, burnout 的痕迹留在 git log 里,像考古层里的火山灰。

技术债通常指烂代码的累积,但「过度设计」是反向的技术债——它把简单问题复杂化,用未来的维护成本换取当下的智力快感。函数式编程的 Monad 模式尤其擅长制造这种债,因为它的抽象层级足够高,高到每个参与者都能说服自己「这是必要的复杂性」。

作者贴出的两段代码对比,本质上是一个微型的技术决策标本。老代码 5 行,新代码 10 行,功能完全一致,测试覆盖率没有变化,唯一增加的是「如果以后需要柯里化调用,不用重写」的可能性。而这个「以后」,在 web 开发的实际场景中,出现的概率接近于零。

burnout 的代码会说话

回到文章开头那个场景:作者说「I never even wanted to be a programmer... how did I get here?」这种 existential 的困惑,和他在代码里追求的「纯粹性」形成奇怪的呼应。当现实世界失控时,人会在虚拟世界里寻找确定性的锚点——对于程序员,这个锚点就是「正确的代码范式」。

但代码不会回答「我为什么在这里」的问题。它只会安静地躺在仓库里,等待下一个 burnout 的人前来解读。

那个 tryPartial 函数的最终命运如何?作者没有说。也许它被回滚了,也许它成了团队里的「祖传代码」,也许某天有人发现 ap 方法的实现里藏着一个微妙的 bug,而调试它需要先读完半本《范畴论》。

如果你也在凌晨三点重构过「本来就能跑」的代码,你后来后悔了吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
日本乒协没想到,被骂惨的张本智和,如今一句话在中国逆转了口碑

日本乒协没想到,被骂惨的张本智和,如今一句话在中国逆转了口碑

天天热点见闻
2026-05-15 06:26:40
OPPO母亲节宣传翻车,策划人履历曝光,紧急砸430万招公关负责人

OPPO母亲节宣传翻车,策划人履历曝光,紧急砸430万招公关负责人

谭谈社会
2026-05-12 17:26:27
农村光棍没减少,又冒4个扎心怪象,热闹背后全是难念的经

农村光棍没减少,又冒4个扎心怪象,热闹背后全是难念的经

老特有话说
2026-05-12 15:30:33
NBA爆了!8人将集体退役?真的没想到啊!

NBA爆了!8人将集体退役?真的没想到啊!

贵圈真乱
2026-05-15 11:17:02
当初没听出来的弦外之音都有什么?网友:哥,X姐把我睡了

当初没听出来的弦外之音都有什么?网友:哥,X姐把我睡了

深度报
2026-05-13 22:51:39
大瓜!马克龙被妻子打耳光,是跟42岁美女演员互发暧昧短信,被抓包了?!

大瓜!马克龙被妻子打耳光,是跟42岁美女演员互发暧昧短信,被抓包了?!

英国那些事儿
2026-05-14 23:29:50
小宝与王某雷,谁探访花的数量更多?

小宝与王某雷,谁探访花的数量更多?

挪威森林
2026-01-31 12:15:26
26届榜眼换状元?爵士想抢本土超级天赋,25届最强天赋成牺牲品!

26届榜眼换状元?爵士想抢本土超级天赋,25届最强天赋成牺牲品!

你的篮球频道
2026-05-15 07:53:51
人老两道坎,迈过就长寿,家中有老人的,一定要看这5点!

人老两道坎,迈过就长寿,家中有老人的,一定要看这5点!

看世界的人
2026-05-13 21:29:48
访华第二天,特朗普像变了个人,主动对华交底,中美共同敌人浮现

访华第二天,特朗普像变了个人,主动对华交底,中美共同敌人浮现

凉了时光人
2026-05-15 06:30:45
最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

周军律师聊案子
2026-04-21 09:50:16
黄景瑜微博突然改名!十年Johnny消失,背后藏着事业大动作

黄景瑜微博突然改名!十年Johnny消失,背后藏着事业大动作

小椰的奶奶
2026-05-15 09:45:15
3年5000万续约?火箭队主控或降薪!续签廉价长约,助力争冠计划

3年5000万续约?火箭队主控或降薪!续签廉价长约,助力争冠计划

熊哥爱篮球
2026-05-15 11:24:30
“23岁研究生被少年无证驾车撞致颅脑损伤”追踪:当地政府为其申办困难补助,爱心网友捐款相助

“23岁研究生被少年无证驾车撞致颅脑损伤”追踪:当地政府为其申办困难补助,爱心网友捐款相助

红星新闻
2026-05-14 21:02:57
编外人员“清退”开始,城管协管、辅警、护士教师都在其中

编外人员“清退”开始,城管协管、辅警、护士教师都在其中

巢客HOME
2026-05-14 05:55:06
直言“台湾永远都不会是中国的一部分”,台湾官员遭明星当众扇脸

直言“台湾永远都不会是中国的一部分”,台湾官员遭明星当众扇脸

王一晓
2026-05-15 10:11:46
尴尬啊!家委会发布高考结束,举行谢师宴,全班50人只有31人报名

尴尬啊!家委会发布高考结束,举行谢师宴,全班50人只有31人报名

火山詩话
2026-05-14 17:54:05
苦等20年,杨紫终于让所有人闭嘴!张一山那句土味情话成预言

苦等20年,杨紫终于让所有人闭嘴!张一山那句土味情话成预言

一盅情怀
2026-04-14 14:23:21
会谈现场气氛缓和,中方直言台湾问题,特朗普的反应值得细品

会谈现场气氛缓和,中方直言台湾问题,特朗普的反应值得细品

创造精彩剧情
2026-05-15 09:21:08
俯卧撑数量出卖真实体能:40-60岁男性对照表

俯卧撑数量出卖真实体能:40-60岁男性对照表

解说阿洎
2026-05-15 00:49:28
2026-05-15 12:19:00
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
2786文章数 30关注度
往期回顾 全部

科技要闻

两年联姻一地鸡毛,传苹果OpenAI濒临决裂

头条要闻

103岁和86岁老人认识3个月"闪婚":孤独感消失了

头条要闻

103岁和86岁老人认识3个月"闪婚":孤独感消失了

体育要闻

德约科维奇买的球队,从第6级联赛升入法甲

娱乐要闻

方媛回应住男生单人间:女孩的配得感

财经要闻

特朗普的北京时刻

汽车要闻

双零重力座椅/AI智能体/调光天幕 启境GT7内饰发布

态度原创

游戏
时尚
本地
数码
军事航空

BLG见面会翻大车!黑粉喷子全过审 真爱粉气炸了

看《给阿嬷的情书》,带纸巾,别带懂王

本地新闻

用苏绣的方式,打开江西婺源

数码要闻

读写破14GB/s!三星9100 PRO助力PRAGMATA瞬秒月球战场

军事要闻

乌克兰首都基辅遭空袭 死亡人数增至12人

无障碍浏览 进入关怀版