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

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

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

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

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

求解惑

10593 次点击
所在节点    程序员
96 条回复
nightwitch
2020-06-10 10:56:32 +08:00
能打断点的话,if-else 的 400 行的函数还算凑合吧,搞清楚哪个分支会在什么情况进入就行了,if-else 多了就是作用域比较讨厌,debugger 可以帮你看到当前作用域可以看到哪些变量。

如果你的业务代码需要用 400 行代码来描述,你拆成小函数也是差不多的,一样要走不同的分支,在不同的小函数里跳来跳去。
Cmdhelp
2020-06-10 10:56:59 +08:00
改一个公司倒闭
crs0910
2020-06-10 11:08:42 +08:00
wayslog
2020-06-10 11:51:23 +08:00
我就不说我曾经维护过一个 1k+行的 python 函数。。。参数十几个,还有 *args **kwargs 。。。我花了一个月才读通它的逻辑。。。
vcode
2020-06-10 12:04:21 +08:00
你是新手啊
zyy314680012
2020-06-10 12:09:36 +08:00
如果是我,肯定不改
mwftts
2020-06-10 12:16:43 +08:00
所以一直很好奇怎么才能优化这种,非专科,只是偶尔也会看到类似的代码,SAP 中
mwftts
2020-06-10 12:20:13 +08:00
所以一直很好奇怎么才能优化这种,非专科,只是偶尔也会看到类似的代码,SAP 中
bxb100
2020-06-10 12:32:59 +08:00
没有单测和边缘测试不要改
wangyzj
2020-06-10 12:33:35 +08:00
代码行数,复杂度和是否可优化没半毛钱关系
业务拆分和是否能复用才是
winglight2016
2020-06-10 12:52:21 +08:00
哈哈哈,400 行还真不算多,我写过 4000 多行的代码,就是为了根据规则计算支付金额,业务逻辑太复杂,没有更好的办法。
celeron533
2020-06-10 13:18:35 +08:00
会不会以前是 16 层嵌套,800 行代码。。。
hu8245
2020-06-10 13:54:42 +08:00
如果逻辑清晰也没什么不合适的吧,当然从维护性来说,是下降了。
justin2018
2020-06-10 14:16:05 +08:00
![xNfesUX]( ) 想到了这个图
sigl0p
2020-06-10 15:23:55 +08:00
400 行不算长的,我接手过 C C++ 函数动则几千行
la2la
2020-06-10 15:34:49 +08:00
见过 java spring 一个类 7000+行的么?改一个标点符号就要备份
Chowe
2020-06-10 16:09:53 +08:00
更可怕的是
#if
#else
jsjgjbzhang
2020-06-10 16:40:02 +08:00
想提升自己就去改 想给自己找麻烦就提交
Keyes
2020-06-10 17:24:13 +08:00
@justin2018 哈哈哈读了一下竟觉得没毛病
noobsheldon
2020-06-10 17:24:46 +08:00
楼主的帖子好喜欢用“俺”,总是让人想起《熊出没》里的熊二

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

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

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

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

© 2021 V2EX