我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目。为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就“开始了设计模式和代码风格的培养”。具体的做法,就是扔给他们“大话设计模式”和金旭亮老师的“.NET 4.0面向对象编程漫谈”。于是项目接着做,我也很忙没怎么看过他们写的代码,直到昨天闲的没事,翻开SVN看各种他们写的代码,然后就很崩溃… 列举如下:

1. 以前命名变量用a1,a2,a3,现在好多了,但能不能别用汉语拼音?聚类的函数就算不写ClusterMethod, 但也不要叫JuleiMethod 啊! 有了继承,那个新类怎么也得反应改进特点吧,最少也不能叫 XXXFinal, XXXTest, 或者XXX2吧?

我在想,这个GuoDu又是什么?过度?国度?我实在想不到数据挖掘领域还有这个拼音的东东。

2. 超大类! 大到什么程度呢? 五百行?不,一千行?不,是五千行!一个MainWindow的类里面,洋洋洒洒五千行代码,100个变量,50多个函数,功能倒是实现了,可是代码滚动条都细的看不见了,敢不敢把逻辑分开啊? “单一职责”真是发挥到淋漓尽致:一个类把一个老师的任务搞定!

3. 你是懒还是勤快?几个类的功能差不多,只有一些细节不同,就算不做继承吧,也别把一样的函数拷贝四五遍啊。下面是两个不同类的截图:

4. 截图同上。 一个对象可能是继承树里的叶子节点,在编程的时候这个基类没有你想要的属性,但不需要每次都as 吧? 如果是单个变量,在代码前as并判断非空不就好了?

若是个集合,在代码开始时通过LINQ语句提取集合中相应类型不就好了? 看到那么多as,你不觉得很烦么?

5. 一个类里面有很多个参数,但能不能不要把所有的参数设置都写到构造函数里面啊,你有10个参数,就要写十个参量的构造函数?能不能做成默认值?其他做成属性访问器不就好了?

6. 能别这么酷爱单例模式和静态变量和方法啊? 我知道你用单例和静态很爽,到处都能调用,可是,内存回收呢?代码扩展性呢?

大哥,怎么说这个词典也能占个200M内存,你为了方便一个单例就搞定了,你让它啥时候被GC回收啊?

7. 我要你把一个代码从JAVA移植到C#上,还真是够辛苦,JAVA没有属性访问器,但是C#里面有啊,干嘛还在C#上把所有的属性都加上个 getXXX() 和setXXX()方法。 你真勤快!而且还加上了javadoc风格的注释,真是辛苦你了

8. 代码注释是用来说明代码的,稍微有些个注释掉的东西还是能理解的,可是,你一个长长的代码文件里,注释比源代码多好几倍,都是以前随便写的测试代码,废弃的代码,舍不得删,可是,后来你再看过吗?你都没看过,这些大段的注释除了碍眼有什么用处?

9. 蛋疼的在集合中删除元素!

你学会了foreach, 可爱的迭代器模式,于是和我一样,不喜欢写for循环了。哪天你问我,foreach中remove会报错!我说,当然会报错,于是你在外面new一个集合,把要删的全拷贝进去,然后再来个for循环拷出来,然后。。。还是不对,最后只能再用for循环了。看得我都要心碎了,咱先不说性能,用LINQ写一个扩展方法RemoveElement不就好了?

  /// /// 对集合实现删除操作//////元素类型///要删除的元素列表///过滤器///删除时执行的委托public static void RemoveElements(this IList source, Func filter, Action method){var indexs = (from d in source where filter(d) select source.IndexOf(d)).ToList();indexs.Sort();for (var i = indexs.Count - 1; i >= 0; i--){if (method != null){method(source[indexs[i]]);}source.RemoveAt(indexs[i]);}}

然后,你在实现IList接口上的集合都能删除元素了,并且还能通过一个委托做一些操作,多舒服啊…

10.  你会在一个类的成员里很高兴的定义一个变量,比如下面:

一个随机数产生器ran, 然后私有成员还很勤快的写了get,set访问器,下面诡异的arrh,这都不说啥了,关键是下面:

这个变量被你在函数中轻易的覆盖了,覆盖了也不管,反正好像程序结果也是正确的,可是以后没这么走运怎么办?

11.  你不懂什么叫写“库”,只知道写代码,代码重用就是代码搬运工,从这边拷贝到那边。真正的库是什么?稳定,高效,好用,扩展性强。 到现在都没写过一个库,老师布置什么任务,新开一个工程,名字命名成XXXTest, 然后一顿狂敲,毕业时候,工作就是那么20多个不同的文件夹,所有代码都是给自己写给自己看,到最后连自己都看不懂了… 那些能够重用的功能,为什么不好好重构一下,以后肯定还能用得着啊!

12. Console.WriteLine(“xxxxxxxx”)

Console.WriteLine(“xxxxxxxx”)

Console.WriteLine(“xxxxxxxx”)

你给写的类库,里面全是这些控制台输出,做Console程序还好,一个大黑框哗哗哗的输出出来,可是,做WPF界面程序和WCF呢?你总不至于输出到VS里那个小小的调试窗口吧!我哪天想让你输出到txt文件,你是不是就傻眼了?  敢不敢用用专门的日志组件,比如log4net!

13.  C风格的C#, 里面全是数组,数组,数组。。。。。。太怨念了。.NET疯了会搞那么多集合和接口进去?全用数组不就得了?

两个集合的对应元素需要做加法,你是这么做的:

可是,如果这个代码被执行1000遍,你就要new一千次数组,且不管GC效率如何,这种需求你完全可以返回一个IEnumerable过去,通过类似LINQ的延迟计算进行,也不用生成这么多数组啊啊啊。。。。

13. for循环啊!

能不能写个for循环?敢不敢? 不仅如此,你都愿意为一块仅仅有细微差别的代码复制十遍,却不敢写一个for循环?

14. 做界面时候的事件引用器…

在界面上,你会在每个按钮,每个菜单双击一下,然后在C#代码中,敲事件处理程序,无非就是一堆变量赋值,一堆初始化等等,若你是做Winform,那我也就勉强不说什么了,可是你做的是WPF,这么紧密的耦合,让以后我改界面或者改逻辑的时候怎么办? 敢不敢去学一下绑定和MVVM?

15. 还有无数的槽点,比如你会在程序位置输出几百兆的txt文件方便你调试,然后就都被你无良的上传到SVN上面去了,SVN也从来不正确使用,也不管冲突不冲突就直接点确定,最最让我不能忍受的是:

哼!明天开会收拾你!

学弟们如果看到这篇文章,千万别记恨我,或者到导师那边告我状,我还是很想正常毕业的啊…

转载于:https://www.cnblogs.com/buptzym/archive/2013/05/25/3099389.html

代码能不能不要写得这么烂?!相关推荐

  1. 学弟啊,你代码能不能不要写得这么烂?!--文末送书

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 作者:沙漠之鹰 www.cnblogs.com/buptzym/archive/2013/05/25/3099389.html 今日封面图 ...

  2. 代码总是被嫌弃写的太烂?装上这个IDEA插件再试试!

    来源 | https://www.cnblogs.com/cjsblog/p/10735800.html 1.  SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中 ...

  3. 当程序员说“这代码写的可真烂”,他们的意思是“这烂代码不是我写的”。而当他们说这段代码有些“小问题”时,很可能这代码是他们自己写的...

    英文原文:What Programmers Say vs. What They Mean 你是否听到过同事说"这段代码不言自明"?你的同事的这句话的实际意思是这段代码不需要写注释. ...

  4. 令人笑喷的56个代码注释,你写过多少?

    程序员的幽默(ID:humor1024)整理 老衲不请自来, 给大家献上一波神注释 供施主们娱乐娱乐 0. /** Dear Maintainer** Once you are done trying ...

  5. 我的代码和注释都写的像坨屎,那又怎么样?

    一周前,我的朋友圈被一篇 #百度某新员工发飙:前人代码写得像一坨屎,颠覆了对大厂的认知# 的文章刷屏了,评论区也非常热闹. 但让我惊讶的是,几乎所有的声音里都充满着嘲笑与讥讽,有的剑指百度的价值观,那 ...

  6. pycharm格式化代码快捷键_你写的 Python 代码总是不规范?用它!

    今天咱们来说说代码风格不同的编程语言有不同的代码风格 Python 的代码规范就是人们常说的 PEP8 在这个网站https://www.python.org/dev/peps/pep-0008/#i ...

  7. 令人笑喷的 56 个代码注释,你写过多少?

    来源 | 程序员的幽默 老衲不请自来, 给大家献上一波神注释 供施主们娱乐娱乐 0. /** Dear Maintainer** Once you are done trying to 'optimi ...

  8. 40岁程序员写出租车一键下单电话叫车软件后被发帖骂骗子写得太烂

    俺从2004年开始入行,从asp写到c++..net.java.ruby.PHP.object-c.单片机:至今已经17年整. 老老实实写了17年代码,经历了"程序员只能吃青春饭,到了30岁 ...

  9. 徐磊(Devops):一名写了十几年代码但还没写够的程序员

    徐磊(Devops 社区领袖) [个人介绍] 徐磊,微软MVP(微软最有价值专家,大中华区域社区技术总监,Devops 社区领袖),从事过网管.技术支持.网络.软件开发等工作,一名写了十几年代码但还没 ...

最新文章

  1. Spring Boot 实现定时任务的 4 种方式
  2. 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
  3. Linux浏览文件的常用命令
  4. Linux系统时间和硬件时间设置
  5. Http\Https\Socket
  6. 通过Chrome扩展来批量复制知乎好友
  7. POJ 3178 凸包+DP (巨坑)
  8. 深入浅出数据分析:寻找最大值Solver
  9. 几种物流业务的凭证模板设置说明
  10. Minidump文件分析
  11. 2021年最新版裁判文书逆向
  12. 爬虫基础篇之斗鱼弹幕
  13. 使用while循环实现xyz+yzz=532
  14. 基于深度学习自动对焦技术
  15. 蚂蚁金服副总谈区块链
  16. Springboot+采用协同过滤算法的家政服务平台的设计与实现 毕业设计-附源码260839
  17. Java实现线性回归模型算法
  18. Eclipse中快捷键Ctrl + Alt + 向上箭头 或者 Ctrl + Alt + 向下箭头与Windows冲突
  19. JavaScript处理json数据(对象,数组,集合)
  20. 华为鸿蒙系统HarmonyOS学习之二:鸿蒙HarmonyOS系统架构

热门文章

  1. access month函数用法_学会了这7个EXCEL日期函数技巧,老板再让你加班,你找我!...
  2. coverity代码检测工具介绍_微服务测试之静态代码扫描
  3. 双纵坐标的绘图命令_工程师绘图必备软件——OriginLab 2019b
  4. 我是最棒的,我一定会成功!
  5. 力扣151. 翻转字符串里的单词
  6. 力扣删除排序数组中的重复项
  7. 操作系统上机作业--使用系统调用实现mycat
  8. 计算机的网络与结构,计算机结构与组成29-网络.ppt
  9. suse linux 查看cpu,Suse Linux zmd 耗用100% CPU
  10. asinh函数_JavaScript中带有示例的Math.asinh()方法