8 层嵌套, 400 多行代码的函数。。。

2020-06-09 21:13:10 +08:00
 asanelder

遇到一个老的项目,有一个函数是 8 层嵌套,if 套 while 再套 if 再套 while 再套 if ....,而且每个条件判断中,各种&& 套 || 再套 &&,这个 8 层嵌套俺数了一下,一共 400 多行代码。。。

让俺感觉到奇怪的是,之事从事这个项目的老员工对这个函数竟然没有丝毫的意见,他们似乎很平静。

那么问题来了,俺之前受的教育是,函数应该尽量短小,嵌套应该尽量浅。所以遇到这个函数俺自然感觉浑身不适,但那些老员工似乎都很平静。是俺太笨了,理解不了这种 8 层嵌套,还是俺太矫情,太理想主义了,太教条了,还是老员工已经习惯了?

求解惑

10595 次点击
所在节点    程序员
96 条回复
GopherTT
2020-06-10 18:12:33 +08:00
@noobsheldon hhah 特地数了下 八个:)
KasonPasser
2020-06-10 18:22:28 +08:00
好想见识一下,我一般都是复制一个新的函数出来改,原来的能不动尽量不动。
改完了测试没问题再迁移,不过一般出问题了都是没有好结果。
确实想改送你六个字:慎之慎之慎之。
deplives
2020-06-10 18:29:07 +08:00
我见过一个实习生写的 Python request handle 多达 1500 多行,仔细一看,他一个 handle 处理了 get post put delete 不同请求
w516322644
2020-06-10 18:43:21 +08:00
@justin2018 你是不是在黑 php,我遇见过 java 这么类似写的。
asanelder
2020-06-10 18:46:50 +08:00
@codergrowing #58 哈哈,笑尿了
zuokanyunqishi
2020-06-10 18:58:30 +08:00
你是没见过 800/1500 行的函数🐶
cwek
2020-06-10 20:52:45 +08:00
没坏,别动
akira
2020-06-10 20:56:27 +08:00
老员工都知道 这种代码不能动,一动就必然会死人.
sampeng
2020-06-11 07:28:14 +08:00
去年这类帖子出来还是尽量自己慢慢重构了。除非是算法类,普通逻辑类的大函数就没有改不掉的。是会有风险,现在程序员都居安思危到这个地步了?太可怕了…
codingbody
2020-06-11 08:05:54 +08:00
spring jdbctemplate 中 setvalue 方法 200 多行全是 if else else if
soulmt
2020-06-11 08:56:55 +08:00
不要慌,常见操作, 老代码别动就对了
Daniel17
2020-06-11 13:42:34 +08:00
一个 switch800 行的见过没。。还全部写在 controller 层
royan
2020-06-11 14:08:42 +08:00
补测试,动手改。大不了跑路,怕什么[狗头 /摊手]
wisetc
2020-06-13 11:09:17 +08:00
你如果能改并且保证不出问题也要看看做了这件事对谁有利,是否在为前人背锅,成为搏傻游戏里的傻人呢?如果要扩展,并且之前开闭原则都不遵守,这家公司的管理是不是有问题呢?这个问题是你的吗?
EscYezi
2020-06-13 14:34:17 +08:00
还真拆过一个 400 行的,按业务逻辑拆成了三个。后来有需求要在这块加东西,还好之前拆了,不然真的要吐
ruzztok
2020-06-15 15:50:59 +08:00
逻辑没有问题、不影响性能、没有复用价值的 1000 层又怎样??现实一点,不要看太多阿里巴巴的编程手册和一些编码规范之类的书

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX