百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

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

liuian 2025-03-05 17:59 36 浏览

我是一个研二的即将实习和毕业的普通屌丝研究生,带着几个研一的同学一起做数据挖掘项目。为了在毕业的时候防止青黄不接导致老师不让我毕业,于是从他们刚进实验室起,就“开始了设计模式和代码风格的培养”。具体的做法,就是扔给他们“大话设计模式”和金旭亮老师的“.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 != )

{

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也从来不正确使用,也不管冲突不冲突就直接点确定,最最让我不能忍受的是:

哼!明天开会收拾你!

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

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

点击下图,参加CocoaChina最新活动

微信号:CocoaChinabbs

(长按上图,可自动识别二维码)

--------------------------------------

商务合作QQ:645047738

投稿邮箱:support@cocoachina.com

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...