免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 20368 | 回复: 41
打印 上一主题 下一主题

[C++] 代码太烂无法维护?看大师来教你如何驯服烂代码! [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-15 09:30 |只看该作者 |倒序浏览
获奖名单已公布http://bbs.chinaunix.net/thread-4165654-1-1.html

极限编程的创始人Kent Beck对编程给出了如下定义:
1)编程是一种态度。
2)编程是一种技艺。
3)编程是一种习惯。
这三句话的语序并非随意排列,而是代表了一个渐进的过程。首先需要树立正确的编程态度,进而追求编程技艺的提升,最终形成良好的编程习惯。
正所谓“态度决定一切”,编程态度的重要性不言而喻,殊不知,作为程序员的我们却常常忽略了它。不是轻视,而是自以为已经理解。写出好代码,不是自然而然的吗?哪里用得着再三强调?——只是……
只是他们会说:“倘若时间允许,我当然是要竭尽所能写出好代码啊!”
言外之意,若是时间不允许,我们就有了粗制滥造的权利了!

为什么我们工作中会遇到这么多无法维护的烂代码?
我们在工作中也写了大量的无法维护的烂代码么?

本期话题:

1、show一段工作中您遇到的,认为烂到不行的代码(别从网上拷贝的那种啊)
2、为什么在各种编程规范的前提下,还有各种各样的烂代码出现?根本原因是什么?
3、如何有效地在团队编程中避免这种烂代码?

活动时间:2014.12.15  ~2014.12. 30

活动要求:要言之有物,不能低于20个字。

活动奖励:
活动结束后,我们会评选出五位积极参与话题讨论的网友奖励《驯服烂代码:在编程操练中悟道》图书一本,对其他积极参与讨论的网友(回帖有参考价值)我们将奖励积分20分。

图书简介:
驯服烂代码:在编程操练中悟道(精装)

作者: 伍斌   
出版社:机械工业出版社
ISBN:9787111481553
上架时间:2014-10-22
出版日期:2014 年11月
开本:16开
页码:260

样张下载:
文前.pdf (709.75 KB, 下载次数: 74)
1-3Z.pdf (4.33 MB, 下载次数: 113)

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
2 [报告]
发表于 2014-12-15 10:14 |只看该作者
从代码中悟道能破碎虚空不

论坛徽章:
0
3 [报告]
发表于 2014-12-15 10:51 |只看该作者
无备注,变量不认识,常量分不清。

论坛徽章:
0
4 [报告]
发表于 2014-12-15 10:53 |只看该作者
public String importExcel() {
                HttpServletRequest request = ServletActionContext.getRequest();
                HttpServletResponse response = ServletActionContext.getResponse();
                ServletContext sc = request.getSession().getServletContext();
                RequestDispatcher rd = null;
                response.setContentType("text/html;charset=gbk");
                Employee employee = ((Employee) session.get("employee"));
                String pageInfo = "";
                // 权限处理,用于上传做判断
                List listVillageCode = getEqualsVillageCode(employee);
                RelaRoleEmp emp = this.pro10kvBiz.selEntity(employee);
                Integer roleid = emp.getRole().getRoleId();
                RelaRoleFlow flow = this.pro10kvBiz.selRelaEntity(roleid);
                Long flowid = flow.getId().getRelaFlowId();
                Workflowdefine workflowdefine = this.pro10kvBiz.selWorkEntity(flowid);
                Long step = Long.parseLong(workflowdefine.getStep().toString());
                PrintWriter out = null;

                List<Pro10kv> list = new ArrayList<Pro10kv>();
                java.text.DecimalFormat formatter1 = new java.text.DecimalFormat(
                "##.###");
                 
                int arra = 0;
                int arrj = 0;
                try {
                        HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(file));
                        HSSFSheet sheet = wookbook.getSheetAt(0); //读取第一页,一般一个excel文件会有三个工作表,这里获取第一个工作表来进行操作
                        int rows = sheet.getPhysicalNumberOfRows();
                        AnalysisExcel ae = new AnalysisExcel();
                        List<CellRangeAddress> celllList = ae.getCombineCell(sheet);
                        // 从第7行开始读取数据
                        String proTypeOne = "";
                        for (int i = 6; i < rows; i++) {
                                HSSFRow row = sheet.getRow(i); //创建一个行对象
                                if (row != null) {
                                        arra = i + 1;
                                        String value = "";
                                        HSSFCell celltemp = row.getCell(3);
                                        if(celltemp == null)
                                        {
                                                continue;
                                        }
                                        else
                                        {
                                                String cellStr = celltemp.getStringCellValue();
                                                if("单项合计".equals(cellStr))
                                                {
                                                        HSSFRow temprow = sheet.getRow(i);
                                                        proTypeOne = ae.getCellValue2(temprow.getCell(2));
                                                        if(null != proTypeOne)
                                                                proTypeOne = proTypeOne.substring(proTypeOne.indexOf("、")+1);

                                                }
                                                if("单项合计".equals(cellStr) || "".equals(cellStr) || "子项合计".equals(cellStr))
                                                {
                                                        continue;
                                                }
                                        }
                                        for (int j = 0; j < 27; j++) {
                                                HSSFCell cell = row.getCell(j);
                                                String str = "";
                                                boolean cellBoolean = ae.decodeMergeCell(sheet, i, j);
                                                if(cellBoolean)   
                                                {
                                                        cell = row.getCell(j);
                                                        str = cell.getStringCellValue();
                                                }
                                                if(j == 2)
                                                {
                                                        value += proTypeOne; // 获取项目一级类别
                                                }
                                                else if (null != cell) {
                                                        value += ae.getCellValue2(cell,formatter1);
                                                } else {
                                                        value += "-,,,";
                                                }
                                        }

                                        Pro10kv pro10kv = new Pro10kv();
                                        String query = value.substring(0, value.length() - 1);
                                        String[] arrs = query.split(",,,");
                                        out = response.getWriter();


                                        for (int j = 0; j < arrs.length; j++) {
                                                if(!"-".equals(arrs[3]))
                                                        if (j == 4 || j == 5 || j == 23 || j == 24 || j == 25)
                                                        {
                                                                if("-".equals(arrs[j]))
                                                                {
                                                                        pageInfo = "第"+arra+"行第"+j+"列记录未填写完整,<br>请重新检查数据!";
                                                                        request.setAttribute("pageInfo", pageInfo);
                                                                        rd = sc.getRequestDispatcher("/importFile.jsp");
                                                                        rd.forward(request, response);
                                                                        return null;
                                                                }

                                                        }
                                        }
                                        String villageCode1 = arrs[4]; // 村编号
                                        Area aa = areaBiz.findByAreaId(Long.parseLong(villageCode1));
                                        // 判断村编号
                                        if (aa == null) {
                                                pageInfo = "第"+arra+"行村编号不存在!";
                                                request.setAttribute("pageInfo", pageInfo);
                                                rd = sc.getRequestDispatcher("/importFile.jsp");
                                                rd.forward(request, response);
                                                return null;
                                        }
                                        // 权限范围内的村编号比较
                                        boolean isJudge = false;
                                        for (int village_Temp = 0; village_Temp < listVillageCode
                                        .size(); village_Temp++) {
                                                Map mp_Temp = (Map) listVillageCode.get(village_Temp);
                                                String temp = mp_Temp.get("AREA_ID").toString();// 权限内的编号
                                                int temp_len = temp.length(); // 编号长度
                                                String villageCode = arrs[4].substring(0, temp_len);// xls中的村编号取比较长度
                                                if (temp.equals(villageCode)) {
                                                        isJudge = true;
                                                        break;
                                                }
                                        }
                                        if (isJudge) {
                                                pro10kv.setProVillageCode(arrs[4]);// 村编号
                                        } else {
                                                pageInfo = "第"+arra+"行记录越权,<br>请重新检查数据!";
                                                request.setAttribute("pageInfo", pageInfo);
                                                rd = sc.getRequestDispatcher("/importFile.jsp");
                                                rd.forward(request, response);
                                                return null;
                                        }
                                        pro10kv = setPro10kv(pro10kv,arrs);       
                                        pro10kv.setProStatus(step);
                                        Pro10kv pro10kvffff = pro10kvBiz.selPro10kv(pro10kv);
                                        if(null != pro10kvffff)
                                        {
                                                pageInfo = "第"+arra+"行数据已存在,<br>请勿重复导入!";
                                                request.setAttribute("pageInfo", pageInfo);
                                                rd = sc.getRequestDispatcher("/importFile.jsp");
                                                rd.forward(request, response);
                                                return null;
                                        }
                                        pro10kv.setProjectLibrary(0);
                                        list.add(pro10kv);
                                }
                        }
                        boolean flag = false;
                        String proProjectNameFlag = "";
                        for(int i = 0; i < list.size()-1&& !flag ; i++ )
                        {
                                Pro10kv pro1 = list.get(i);
                                String pro1ProjectName = pro1.getProProjectName();
                                String pro1ProVillageCode = pro1.getProVillageCode();
                                String pro1ProInvestAttribute = pro1.getProInvestAttribute();
                                String pro1ProYear = pro1.getProYear();
                                for(int j = list.size()-1; j > i; j-- )
                                {
                                        Pro10kv pro2 = list.get(j);
                                        String pro2ProjectName = pro2.getProProjectName();
                                        String pro2ProVillageCode = pro2.getProVillageCode();
                                        String pro2ProInvestAttribute = pro2.getProInvestAttribute();
                                        String pro2ProYear = pro2.getProYear();
                                        if(pro1ProjectName.equals(pro2ProjectName) && pro1ProVillageCode.equals(pro2ProVillageCode)
                                                        && pro1ProInvestAttribute.equals(pro2ProInvestAttribute) && pro1ProYear.equals(pro2ProYear))
                                        {
                                                proProjectNameFlag = pro1ProjectName;
                                                flag = true; // 跳出外层
                                                break;

                                        }
                                }
                        }
                        if(flag)
                        {
                                pageInfo = "当前表中数据重复!<br>重复数据的项目名称为:"+proProjectNameFlag;
                                request.setAttribute("pageInfo", pageInfo);
                                rd = sc.getRequestDispatcher("/importFile.jsp");
                                rd.forward(request, response);
                                return null;
                        }
                        for (Pro10kv pro : list) {
                                this.pro10kvBiz.addPro10kv(pro);
                        }
                 
                        pageInfo = "success";
                        request.setAttribute("pageInfo", pageInfo);
                        rd = sc.getRequestDispatcher("/importFile.jsp");
                        rd.forward(request, response);

                } catch (Exception e) {
                        e.printStackTrace();
                }
                return null;
        }

论坛徽章:
0
5 [报告]
发表于 2014-12-15 10:57 |只看该作者
本帖最后由 sophieroyal 于 2014-12-15 11:01 编辑

如此类的代码太多了,上面的代码还是我后来有空的时候帮忙写的注释,不然就是空白一片,刚接手这些代码的时候,头痛得太厉害了,前任走的快,还没怎么接手,就直接跑路不干了,就留下单个程序给我,无文档,无说明,无需求,数据库无介绍。

论坛徽章:
0
6 [报告]
发表于 2014-12-15 11:02 |只看该作者
本帖最后由 xike2002 于 2014-12-15 11:37 编辑

这么多年了,谁还没写过几行烂代码呢?
下面我们来具体说一说。
1、show一段工作中您遇到的,认为烂到不行的代码(别从网上拷贝的那种啊)
答:这是我刚参加工作时经常遇到的代码

为什么说这段代码比较烂呢,主要有以下几点原因:
(1)代码中的变量名称的定义做得不好。
我们应该在定义变量和常量的名称时最好选用一个能概括其含义的单词或者常用的单词缩写。
(2)比较语句最好是这么来写,0 == score,而不是像这样写,if(rr == 0x00000000)。
应该是值在前,变量在后,这样是为了防止少写一个等号。
总的来说,没有烂代码就没有好代码,我们应该感谢这些烂代码。

2、为什么在各种编程规范的前提下,还有各种各样的烂代码出现?根本原因是什么?
3、如何有效地在团队编程中避免这种烂代码?

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
7 [报告]
发表于 2014-12-15 16:37 |只看该作者
本帖最后由 forgaoqiang 于 2015-01-05 17:25 编辑

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
8 [报告]
发表于 2014-12-15 18:32 |只看该作者
2、为什么在各种编程规范的前提下,还有各种各样的烂代码出现?根本原因是什么?


制定的规则要么自己不执行,要么没法执行。总结起来四个字,领导无方

论坛徽章:
10
CU大牛徽章
日期:2013-05-20 10:44:54数据库技术版块每日发帖之星
日期:2015-06-09 22:20:00IT运维版块每日发帖之星
日期:2015-06-05 22:20:00亥猪
日期:2014-08-23 14:52:27摩羯座
日期:2013-11-29 18:02:31CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-05-20 10:45:31CU大牛徽章
日期:2013-05-20 10:45:24CU大牛徽章
日期:2013-05-20 10:45:13综合交流区版块每日发帖之星
日期:2016-02-12 06:20:00
9 [报告]
发表于 2014-12-15 21:25 |只看该作者
不做开发好多年,围观中

论坛徽章:
1
天蝎座
日期:2014-07-20 17:37:17
10 [报告]
发表于 2014-12-16 09:12 |只看该作者
1、show一段工作中您遇到的,认为烂到不行的代码(别从网上拷贝的那种啊)

巨型的类或函数,不贴了……

2、为什么在各种编程规范的前提下,还有各种各样的烂代码出现?根本原因是什么?

其实有时还真是因为公司自己的编程规范造成的,尤其是大公司,在沟通不畅的情况下,为了避免跟一些所谓的QA解释,就用一些奇技淫巧应付。

3、如何有效地在团队编程中避免这种烂代码?

不希望QA是那种炒不掉的老人……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP