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

文章目录

  • 01 命名变量随意
  • 02 臃肿的类
  • 03 函数拷贝四五遍
  • 04 过多的as
  • 05 类里面有很多个参数
  • 06 静态方法
  • 07 Java和C#是有区别的
  • 08 不规范的代码注释
  • 09 蛋疼的在集合中删除元素
  • 10 诡异的arrh
  • 11不懂什么叫“库”
  • 13 C风格的C#
  • 13 for循环啊!
  • 14 做界面时候的事件引用器…
  • 15 还有无数的槽点

01 命名变量随意

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

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

02 臃肿的类

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

03 函数拷贝四五遍

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

04 过多的as

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

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

05 类里面有很多个参数

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

06 静态方法

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

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

07 Java和C#是有区别的

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

08 不规范的代码注释

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

09 蛋疼的在集合中删除元素

你学会了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 诡异的arrh

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

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

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

11不懂什么叫“库”

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

Console.WriteLine(“xxxxxxxx”)
Console.WriteLine(“xxxxxxxx”)
Console.WriteLine(“xxxxxxxx”)

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

13 C风格的C#

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

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

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

13 for循环啊!

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

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

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

15 还有无数的槽点

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

哼!明天开会收拾你!

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

作者:热情的沙漠
出处:http://www.cnblogs.com/buptzym/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
结语:原作者也已经毕业了,曾经的写烂代码的学弟也能独挡一面了。不知道你是否会想起曾经写烂代码的那段经历?

学弟啊,你代码能不能不要写得这么烂?相关推荐

  1. 代码能不能不要写得这么烂?!

    我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目.为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就"开始了设计模式和代码风格的培养 ...

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

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

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

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

  4. 小透明学弟的华为上岸之路

    分享直系学弟 "离奇" 的求职经历和心路历程. 大家好,我是鱼皮,今天给大家分享一位 同校同系 学弟的亲身经历. 这位学弟自称小透明,就读软件工程专业,即将本科毕业入职华为,职位是 ...

  5. 计算机学院特色迎新标语,有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵...

    有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵 现在正是各大高校迎新的日子,来自全国各地的学生都到了自己的母校,相信有很多新生的第一件事就是逛校园,毕竟要先熟悉一下自己的校园,不然走错路 ...

  6. 【程序员跳槽】学弟被高薪挖走不到一年就后悔的无奈经历,到底是老板的水深?还是学弟太年轻?

    01 我的学弟,最近向我吐槽,2020 年下半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满干劲,不到一年的时间,参与了不少项目. 可是疲于应对工作,填了不少的技术"坑&quo ...

  7. 写给学弟们编程入门时必须掌握的HTTP基础知识总结

    经常有刚开始走上编程道路的学弟们,问我一些可能从业人员都懂但是又不好解释的基础知识,最近发现公众号「小白debug」的一篇HTTP基础知识的图解总结的非常好,还有贱萌的小肥柴讲骚话,在这里分享给大家收 ...

  8. 【自我感悟致学弟学妹】大三上的感悟,何为真正优秀的人

    突然发现半年前写的小博客,不知道为什么被设置为私密了..还是放出来吧.. 我是计算机专业的,但是这篇文章不针对某个专业的同学,而是针对所有人. 明天就要考计算机三级和四级了,然而几乎没有复习的我已经放 ...

  9. 给计科专业的学弟学妹们的一封信

    学弟.学妹,你们好!   这是给所有已经选择或者即将选择计科专业的学弟学妹们的一封信.   学习计算机科学与技术,无疑需要浓厚的兴趣以及强大的耐心,当然,我相信所有工科专业都是如此.选择计算机科学与技 ...

  10. 奉劝想把编程学好的学弟们 · 如何高效学习编程?

    大家好,我是安然无虞. 目录 一.毕业想成为程序员,现在该怎么学? 1.IT行业是不是值得进入? 2.想做研发工作,该学习什么? 二.怎么学,有方法吗? 1.入门攻略 怎么学好C语言 使用C语言写一些 ...

最新文章

  1. eclipse设置代码自动保存步骤
  2. 转载-SQL Server各种导入导出数据方式的比较
  3. 十大流行AI框架和库的优缺点对比
  4. 北工大计算机学院教授,北工大计算机学院计算机科学与技术导师介绍:杨宇光...
  5. BusinessObject J2EE单点登陆简单使用
  6. 可变导向车道——为了缓解高峰压力的临时转向车道
  7. Tomcat下找不到properties文件
  8. 【数据结构与算法】链式栈的Java实现
  9. 使用glbindbuffers产生访问冲突_预防IP地址冲突的应对方案,你知道吗?
  10. 安卓隐藏摄像_【快讯:诺基亚发布三款安卓机;全面屏手机的最终形态,目标是去掉摄像头;iPhone 打电话不息屏或挂断电话后不亮屏是什么问题?】...
  11. 「开源资讯」Apache Storm 2.2.0 发布,分布式实时计算
  12. 【TWVRP】基于matlab遗传和粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1037期】
  13. 每日一记—获取Bing每日一图实现Android欢迎页(一)
  14. 递归实现 1,1,2,3,5,8,….第 30 个数是多少?
  15. 笔记本连接显示器后没有声音
  16. 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123。
  17. 开发人员的windows工具箱
  18. putty下载(Putty下载中断)
  19. npm install 报错 ERR! gyp ERR! cwd D:\workspace\node_modules\node-sass错误解决/npm ERR! gyp verb `which
  20. 密评复习(选择+简答)

热门文章

  1. SLAM学习-论文综述(一)
  2. 手机内存文件夹html,手机内存难清理?试试直接删掉这3个文件夹,网友:咋不早说?...
  3. 辩证唯物主义和历史唯物主义思维导图 - 圣才
  4. 常见的虚拟化软件及其特点。
  5. 知乎高赞的学习网站,建议收藏
  6. Linux的tomcat文件夹下没有startup.sh
  7. 启动优化之Android-Startup
  8. python爬虫爬取网易云音乐歌手信息
  9. matlab怎么计算泰尔指数,求助:泰尔指数怎么算呢
  10. 计算机网络专助理工程师考试时间,软考高级工程师职称考试时间