上一篇文章中程序员的幸福生活——有你的日子,每天都是情人节,收到了大家的很多好评、鼓励和祝福,非常感动,真诚的谢谢大家。也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生。
在开发过程中,我们经常会遇到大量重复或者类似的代码需要编写,当然我们可以通过各种模式来避免这种情况出现,但肯定有些时候我们是无法避免的,那么遇到这种情况,我们该如何快速完成这些重复或类似的代码的编写呢。下面来说一下我的方法,当然,如果大家有更好的方法,希望能分享出来。
大量重复代码——switch/case枚举的遍历
说到大量重复类似代码,就不得不说switch/case,如果一个枚举里面有几十项,在switch的时候,每一项都要写一个case,如下所示:
enum GoldenTagFieldIndex { Tag, Id, Type, Table, Desc, Unit, Archive, Digits, Shutdown, Lowlimit, Highlimit, Step, Typical, };
编写switch/case后,达到的效果:
GoldenTagFieldIndex index = GoldenTagFieldIndex.Tag; switch (index) { case GoldenTagFieldIndex.Tag: case GoldenTagFieldIndex.Id: case GoldenTagFieldIndex.Type: case GoldenTagFieldIndex.Table: case GoldenTagFieldIndex.Desc: case GoldenTagFieldIndex.Unit: case GoldenTagFieldIndex.Archive: case GoldenTagFieldIndex.Digits: case GoldenTagFieldIndex.Shutdown: case GoldenTagFieldIndex.Lowlimit: case GoldenTagFieldIndex.Highlimit: case GoldenTagFieldIndex.Step: case GoldenTagFieldIndex.Typical: default: break; }
这样的代码,如果纯手写,既枯燥,又浪费时间,但是代码必须要写,如何快速的生成这些switch/case代码才是关键,我总结了我在编写代码过程中使过的五种方法:
- VS直接生成——只适用于2010版本以上的VS,而且必须是DotNet开发
- ReSharper一键生成——只适用于DotNet开发
- 通过快捷键进行操作
- 使用代码生成器
- 使用Excel完成代码生成
VS自动生成
当进行DotNet开发的时候,这种switch/case可以很容易的使用2010以上版本的VS自动生成,当然也只能是DotNet,如果是C++,那么不好意思了,不支持。
在VS中可以通过一个switch的snippet来自动生成枚举的项的case语句。具体操作步骤:先写switch,然后按Tab键,然后写入枚举变量名,然后按Enter键,这样其余所有代码就可由VS自动完成了。是不是很方便呢,下面直接看图:
DotNet神器——ReSharper一键生成
说到ReSharper,就不得不说,DotNet开发人员实在是太幸福了,各种标准库,各种帮助类,就连辅助工具也堪称神器,让我等在工作中使用C++的码农羡慕嫉妒恨啊。
直接上图,看了图,你就知道什么是神器了:
貌似装了ReSharper后,VS的自动完成功能就不好用了,不知道只有我这样,还是普遍现象。不过既然用了ReSharper,而且也这么好用,那么就不去计较VS的自动完成了。
ReSharper还有很多强大的功能,等待你的发现。
通过快捷键进行操作
VS自动完成、ReSharper一键生成固然十分方便,以至于其他方法都弱爆了,但是这是有前提的,只有DotNet开发才有这么感人的功能。而C++呢,我们只能求助于下面的方法了。
对于程序员来说,想要高效的完成代码的编写,就需要熟练掌握各种快捷键,有了这些方便强大的快捷键,那么完成这些重复的switch/case,只是分分钟的事。
下面是操作过程中用到的快捷键:
- Alt:选择代码中某几列
- Ctrl + C :复制
- Ctrl + V :粘贴
- Ctrl + H :替换
- Tab :添加制表符
- Shift + Tab :取消制表符
如果想了解更多VS快捷键的介绍,请参考小坦克的这两篇文章:Visual Studio 常用快捷键 和 Visual Studio 常用快捷键 (二)。
使用代码生成器
做Web开发的朋友应该对代码生成器不是很陌生,至少我当初写三层时,就经常使用代码生成器来生成操作数据库的代码,代码的编写效率那叫一个快。虽然现在转战C++了,但是代码生成器还是能够派上用场的。
我所接触过的代码生成器主要有三种:
- CodeSmith:CodeSmith是我接触的最早的一个代码生成器,个人感觉功能十分强大。自从有了他,就基本上不再用其他的工具。详细的使用资料可以参考官方的帮助文档,或者参考Terrylee的这篇文章 CodeSmith开发系列资料总结。
- T4:T4是微软的代码生成引擎,由于本人没有使用过,所以功能上就不做评论了。
- 动软代码生成器:动软代码生成器是国产的一款软件,本人也只是在操作SQL的时候用过,对于数据库的支持功能比较强大。
由于T4、动软代码生成器用的不多,所以只介绍一下使用CodeSmith生成switch/case代码的方法。
CodeSmith语法什么的,这里就不介绍了,直接上模板:
<%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly Name="CodeSmith.CustomProperties" %> <%@ Property Name="List" Type="CodeSmith.CustomProperties.StringCollection" Category="Custom" Description="This is the list." %> <% for (int i = 0; i < List.Count; i++) { %> case <%= List[i].Trim().Trim(',') %>: <% } %>
有了此模板就可以很方便的生成代码了:
使用Excel完成代码生成
相比于以上两种方法,使用Excel可能会麻烦一些,但是这里只是提供一种思路和方法,在真正遇到问题的时候,要具体问题具体对待。其实Excel功能是很强大的,能熟练的使用Excel,在很多情况下,是可以提高工作效率、编码效率等很多效率的。废话不多说,下面就演示一下如何使用Excel来完成代码的生成:
总结——善于使用工具可以提高效率
当我们遇到switch/case等大量重复或相似代码的时候,最好不要纯手敲,或者通过复制粘贴后再修改,这样不仅效率低,而且对自身也没有提高,可以说是费力不讨好。
而如果能够熟练的使用一些辅助工具,那么就可以事半功倍,大大的提高工作效率,何乐而不为呢。
假设你是一个武林高手,如果再能得到一个神兵利器,那么是不是可以天下无敌了呢。
你的编程水平很高,能够使用各种模式来避免重复代码,如果再能熟练的使用VS(快捷键)、代码生成器等工具,那么恭喜你,终于可以从大量重复的体力劳动工作中解脱了,终于,整个世界清静了。
以上几种只是我比较常用的方法,消灭重复代码编写的方法还有很多。如果你有比较好的方法,那么希望你能分享出来,本人必将不胜感激。