学弟啊,你代码能不能不要写得这么烂?
我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目。为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就“开始了设计模式和代码风格的培养”。具体的做法,就是扔给他们“大话设计模式”和金旭亮老师的“.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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
结语:原作者也已经毕业了,曾经的写烂代码的学弟也能独挡一面了。不知道你是否会想起曾经写烂代码的那段经历?
学弟啊,你代码能不能不要写得这么烂?相关推荐
- 代码能不能不要写得这么烂?!
我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目.为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就"开始了设计模式和代码风格的培养 ...
- 学弟啊,你代码能不能不要写得这么烂?!--文末送书
点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 作者:沙漠之鹰 www.cnblogs.com/buptzym/archive/2013/05/25/3099389.html 今日封面图 ...
- 代码总是被嫌弃写的太烂?装上这个IDEA插件再试试!
来源 | https://www.cnblogs.com/cjsblog/p/10735800.html 1. SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中 ...
- 小透明学弟的华为上岸之路
分享直系学弟 "离奇" 的求职经历和心路历程. 大家好,我是鱼皮,今天给大家分享一位 同校同系 学弟的亲身经历. 这位学弟自称小透明,就读软件工程专业,即将本科毕业入职华为,职位是 ...
- 计算机学院特色迎新标语,有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵...
有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵 现在正是各大高校迎新的日子,来自全国各地的学生都到了自己的母校,相信有很多新生的第一件事就是逛校园,毕竟要先熟悉一下自己的校园,不然走错路 ...
- 【程序员跳槽】学弟被高薪挖走不到一年就后悔的无奈经历,到底是老板的水深?还是学弟太年轻?
01 我的学弟,最近向我吐槽,2020 年下半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满干劲,不到一年的时间,参与了不少项目. 可是疲于应对工作,填了不少的技术"坑&quo ...
- 写给学弟们编程入门时必须掌握的HTTP基础知识总结
经常有刚开始走上编程道路的学弟们,问我一些可能从业人员都懂但是又不好解释的基础知识,最近发现公众号「小白debug」的一篇HTTP基础知识的图解总结的非常好,还有贱萌的小肥柴讲骚话,在这里分享给大家收 ...
- 【自我感悟致学弟学妹】大三上的感悟,何为真正优秀的人
突然发现半年前写的小博客,不知道为什么被设置为私密了..还是放出来吧.. 我是计算机专业的,但是这篇文章不针对某个专业的同学,而是针对所有人. 明天就要考计算机三级和四级了,然而几乎没有复习的我已经放 ...
- 给计科专业的学弟学妹们的一封信
学弟.学妹,你们好! 这是给所有已经选择或者即将选择计科专业的学弟学妹们的一封信. 学习计算机科学与技术,无疑需要浓厚的兴趣以及强大的耐心,当然,我相信所有工科专业都是如此.选择计算机科学与技 ...
- 奉劝想把编程学好的学弟们 · 如何高效学习编程?
大家好,我是安然无虞. 目录 一.毕业想成为程序员,现在该怎么学? 1.IT行业是不是值得进入? 2.想做研发工作,该学习什么? 二.怎么学,有方法吗? 1.入门攻略 怎么学好C语言 使用C语言写一些 ...
最新文章
- eclipse设置代码自动保存步骤
- 转载-SQL Server各种导入导出数据方式的比较
- 十大流行AI框架和库的优缺点对比
- 北工大计算机学院教授,北工大计算机学院计算机科学与技术导师介绍:杨宇光...
- BusinessObject J2EE单点登陆简单使用
- 可变导向车道——为了缓解高峰压力的临时转向车道
- Tomcat下找不到properties文件
- 【数据结构与算法】链式栈的Java实现
- 使用glbindbuffers产生访问冲突_预防IP地址冲突的应对方案,你知道吗?
- 安卓隐藏摄像_【快讯:诺基亚发布三款安卓机;全面屏手机的最终形态,目标是去掉摄像头;iPhone 打电话不息屏或挂断电话后不亮屏是什么问题?】...
- 「开源资讯」Apache Storm 2.2.0 发布,分布式实时计算
- 【TWVRP】基于matlab遗传和粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1037期】
- 每日一记—获取Bing每日一图实现Android欢迎页(一)
- 递归实现 1,1,2,3,5,8,….第 30 个数是多少?
- 笔记本连接显示器后没有声音
- 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123。
- 开发人员的windows工具箱
- putty下载(Putty下载中断)
- npm install 报错 ERR! gyp ERR! cwd D:\workspace\node_modules\node-sass错误解决/npm ERR! gyp verb `which
- 密评复习(选择+简答)