社区
C语言
帖子详情
求高手解答重构问题。
ganjianh8
2011-07-21 10:14:29
最近在重构一个项目
里面的函数写的稀烂
没有任何需求文档以及技术文档,重写这些就不要说了,只能看里面的代码进行逻辑分析,然后再重构
里面一个函数大概有1000~2000行左右
而且很多变量作用域都是整个函数的,但实际使用域只有一个逻辑域里用(譬如if()里用到,前面、后面都用不上,但定义放在函数进口,而且这些变量很多,有些变量是全局的,放得毫无规律很难区分)
重构时间大约只有5个工作日。
求高手给个方法
最好给个相关实例讲解。
这个项目大概有几万行代码。
...全文
180
26
打赏
收藏
求高手解答重构问题。
最近在重构一个项目 里面的函数写的稀烂 没有任何需求文档以及技术文档,重写这些就不要说了,只能看里面的代码进行逻辑分析,然后再重构 里面一个函数大概有1000~2000行左右 而且很多变量作用域都是整个函数的,但实际使用域只有一个逻辑域里用(譬如if()里用到,前面、后面都用不上,但定义放在函数进口,而且这些变量很多,有些变量是全局的,放得毫无规律很难区分) 重构时间大约只有5个工作日。 求高手给个方法 最好给个相关实例讲解。 这个项目大概有几万行代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
品茶
2011-08-01
打赏
举报
回复
1.根据实现的功能写好相关函数的伪代码
2.从老代码中提取相关的实现代码
这样所有变量都是自己定义的,思路会比较清晰
根据实现功能找相关代码,不会陷入逻辑混乱
zhangxfeng112
2011-07-29
打赏
举报
回复
我以前用几百行代码,替换别人7-8千行,
主要还是 改了算法,用另一种更好的思路,去分析解决问题。
zhangxfeng112
2011-07-29
打赏
举报
回复
你有更优的算法去实现别人原来要实现的功能么?
如果你的算法跟原来的一样,改不改的没多大意思,就是浪费时间。还不如补充一下文档。还有注释。
好的代码,要求准确,执行效率高,行多行少都是次要的。
ganjianh8
2011-07-26
打赏
举报
回复
[Quote=引用 16 楼 zhao4zhong1 的回复:]
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。
[/Quote]
这就不是重构了
是跟在代码加空行和缩进一样
赵4老师
2011-07-26
打赏
举报
回复
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。
ganjianh8
2011-07-26
打赏
举报
回复
[Quote=引用 14 楼 benben2301 的回复:]
修改代码比写代码要头疼,特别是在没有文档的情况下,不小心就会出bug。。。。
[/Quote]
所以修改代码走得步伐要比写代码小很多,并且要非常谨慎
这样是为了降低风险
但老板在程序维护人员待遇上跟程序开发新东西的人员上差不多。
挨踢民工的乐章
2011-07-26
打赏
举报
回复
修改代码比写代码要头疼,特别是在没有文档的情况下,不小心就会出bug。。。。
赵4老师
2011-07-26
打赏
举报
回复
[Quote=引用 17 楼 ganjianh8 的回复:]
引用 16 楼 zhao4zhong1 的回复:
不要修改变量的作用域,只修改变量的命名使其有规律和好区分即可。
这就不是重构了
是跟在代码加空行和缩进一样
[/Quote]
如果你认为“修改变量的命名使其有规律和好区分”不是代码重构的话,我只能无语了。
ma100
2011-07-26
打赏
举报
回复
但定义放在函数进口,而且这些变量很多,有些变量是全局的,放得毫无规律很难区分)
如果是C语言只能放在最前, 想重构就只能拆这个函数为多个
ma100
2011-07-26
打赏
举报
回复
5天改几万行怎么可能, 只改你说的那个函数到可以
FrankHB1989
2011-07-26
打赏
举报
回复
别重构了,重写吧。
ganjianh8
2011-07-26
打赏
举报
回复
[Quote=引用 18 楼 zhang20072844 的回复:]
还是先看懂,实现什么功能
[/Quote]
就因为逻辑太长,很难看懂
给你一个几千行的函数,你去慢慢分析其中的逻辑就很辛苦
而且嵌套很深的区域里来个break;或者continue;都够你受的了。
AndyZhang
2011-07-26
打赏
举报
回复
还是先看懂,实现什么功能
ganjianh8
2011-07-22
打赏
举报
回复
而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。
ganjianh8
2011-07-22
打赏
举报
回复
里面用到很多业务上的东西
譬如数据库的查询
传输协议之类的,并且没有需求文档,
推到重来很困难
ganjianh8
2011-07-22
打赏
举报
回复
[Quote=引用 12 楼 reckhou 的回复:]
引用 11 楼 ganjianh8 的回复:
而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。
return绝对是好事啊,函数出口
[/Quote]
你重构的时候,就是把一个分支封装到一个函数中去,结果return只跳出封装的函数,而跟原来跳出最上层的函数有逻辑冲突
除了return,还有continue,break之类的也要注意。
如果封装太多东西的话,自己写的封装函数入参就变得很多,这也是得不偿失的做法。
reckhou
2011-07-22
打赏
举报
回复
[Quote=引用 11 楼 ganjianh8 的回复:]
而且分支里面突然来一句return
对我重构构成很大压力
重构的时候我就怕会打乱它的逻辑。
[/Quote]
return绝对是好事啊,函数出口
至善者善之敌
2011-07-21
打赏
举报
回复
[Quote=引用 7 楼 taodm 的回复:]
建议楼主就别重构了。
你做好了为重构过程引入的错误负责的准备没有?
有一个4格漫画叫“天堂里没有程序员”
[/Quote]
我觉得也是,了解这个函数功能是什么
推倒重来,不破不立,按自己的思路写一个,说不定1~2天就搞定
jernymy
2011-07-21
打赏
举报
回复
将里边的很多接近重复的代码封装函数,然后精简在精简
taodm
2011-07-21
打赏
举报
回复
建议楼主就别重构了。
你做好了为重构过程引入的错误负责的准备没有?
有一个4格漫画叫“天堂里没有程序员”
加载更多回复(6)
Python
重构
通过4个多小时的视频教学,学习如何使用Python编程语言进行有效的
重构
,获得所有基础知识以开始改进和简化你的软件设计,尽情地
重构
。在《Python
重构
视频教程》中,Bryan Beecham向开发人员展示了如何识别代码中的
问题
,如何进行必要的更改以创建可以快速开发的高质量软件,以及如何使用Python编程语言进行高效的
重构
。
重构
是软件改进的核心,它给出了如何使软件变得更好的结构和目的。更改使代码更易于理解、修改和添加。尽管
重构
并不是新事物,但是软件开发人员可能苦恼于如何正确进行
重构
。随着敏捷运动的发展,DevOps之类的概念不断追
求
高质量和精心设计的代码,以实现更快的部署和反馈。现有的很多关于
重构
的文档都使用Java。通过在Python中创建这些示例,它为庞大且持续增长的Python人员提供了更多助力。1111MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0
matlab db5是什么小波,急!在线等,
求
解答
:一个小波去噪的matlab程序,
高手
进
问题
描述:急!在线等,
求
解答
:一个小波去噪的matlab程序,
高手
进下面这个程序是什么意思,具体每一步每一句话是什么意思,尽量详细啊!很急明天就验收了%%%%%%%%%%%%%%%%%%心电信号降噪%%%%%%%%%%%%%%%Birge-Massart策略阈值降噪%基于小波变换的心电信号的降噪ecg=fopen('100.dat','r'); // 调用心电数据库 r为只读N=1201;da...
如果你不爱看书,作为程序员这三本再懒惰你也要读一读
推荐几本适合每一们程序员枕边必备书。既然
问题
提到三本,那就不多不少,只推荐三本,嘻嘻。 1、
重构
改善既有代码的设计(第2版 平装版) 软件开发大师的不朽经典 生动阐述
重构
原理和具体做法 普通程序员进阶到编程
高手
必须修炼的秘笈
重构
,一言以蔽之,是在不改变外部行为的前提下,有条不紊地改善代码。20 多年前,正是《
重构
:改善既有代码的设计》第1 版的出版,使
重构
终于从编程
高手
们的小圈子走...
前端开发知识点
解答
-
问题
-面试
问题
问题
:HTML&CSS基础:对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级、HTML5、CSS3、Flexbox JavaScript基础:数据类型、运算、对象、Function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、DOM、BOM、内存泄漏、跨域、异步装载、模板引擎、前端MVC、路由、模块化、Canvas、...
matlab wname什么意思,急!在线等,
求
解答
:一个小波去噪的matlab程序,
高手
进下面这个程序是什么意思,具体每一步每一句话是什么意思,尽量详细啊!很急明天就验收了%%%%%%%%%%%%%...
优质
解答
供参考:lev=5;[c,l]=wavedec(x,lev,wname);sigma=wnoisest(c,l,1);alpha=2;thr1=wbmpen(c,l,sigma,alpha)[thr2,nkeep]=wdcbm(c,l,alpha)xd1=wdencmp('gbl',c,l,wname,lev,thr1,'s',1);[xd2,cxd,lxd,perf0,perfl2]=...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章