上一篇文章中程序员的幸福生活——有你的日子,每天都是情人节,收到了大家的很多好评、鼓励和祝福,非常感动,真诚的谢谢大家。也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生。

在开发过程中,我们经常会遇到大量重复或者类似的代码需要编写,当然我们可以通过各种模式来避免这种情况出现,但肯定有些时候我们是无法避免的,那么遇到这种情况,我们该如何快速完成这些重复或类似的代码的编写呢。下面来说一下我的方法,当然,如果大家有更好的方法,希望能分享出来。

大量重复代码——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代码才是关键,我总结了我在编写代码过程中使过的五种方法:

  1. VS直接生成——只适用于2010版本以上的VS,而且必须是DotNet开发
  2. ReSharper一键生成——只适用于DotNet开发
  3. 通过快捷键进行操作
  4. 使用代码生成器
  5. 使用Excel完成代码生成

VS自动生成

当进行DotNet开发的时候,这种switch/case可以很容易的使用2010以上版本的VS自动生成,当然也只能是DotNet,如果是C++,那么不好意思了,不支持。

在VS中可以通过一个switch的snippet来自动生成枚举的项的case语句。具体操作步骤:先写switch,然后按Tab键,然后写入枚举变量名,然后按Enter键,这样其余所有代码就可由VS自动完成了。是不是很方便呢,下面直接看图:

VS自动生成

DotNet神器——ReSharper一键生成

说到ReSharper,就不得不说,DotNet开发人员实在是太幸福了,各种标准库,各种帮助类,就连辅助工具也堪称神器,让我等在工作中使用C++的码农羡慕嫉妒恨啊。

直接上图,看了图,你就知道什么是神器了:

Resharper一键生成

貌似装了ReSharper后,VS的自动完成功能就不好用了,不知道只有我这样,还是普遍现象。不过既然用了ReSharper,而且也这么好用,那么就不去计较VS的自动完成了。

ReSharper还有很多强大的功能,等待你的发现。

通过快捷键进行操作

VS自动完成、ReSharper一键生成固然十分方便,以至于其他方法都弱爆了,但是这是有前提的,只有DotNet开发才有这么感人的功能。而C++呢,我们只能求助于下面的方法了。

对于程序员来说,想要高效的完成代码的编写,就需要熟练掌握各种快捷键,有了这些方便强大的快捷键,那么完成这些重复的switch/case,只是分分钟的事。

下面是操作过程中用到的快捷键:

  • Alt:选择代码中某几列
  • Ctrl + C :复制
  • Ctrl + V :粘贴
  • Ctrl + H :替换
  • Tab :添加制表符
  • Shift + Tab :取消制表符

通过快捷键完成switch_case编写_修改后

如果想了解更多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(',') %>:
<% 
} %>

有了此模板就可以很方便的生成代码了:

通过CodeSmith完成switch_case编写

使用Excel完成代码生成

相比于以上两种方法,使用Excel可能会麻烦一些,但是这里只是提供一种思路和方法,在真正遇到问题的时候,要具体问题具体对待。其实Excel功能是很强大的,能熟练的使用Excel,在很多情况下,是可以提高工作效率、编码效率等很多效率的。废话不多说,下面就演示一下如何使用Excel来完成代码的生成:

使用Excel完成代码生成

总结——善于使用工具可以提高效率

当我们遇到switch/case等大量重复或相似代码的时候,最好不要纯手敲,或者通过复制粘贴后再修改,这样不仅效率低,而且对自身也没有提高,可以说是费力不讨好。

而如果能够熟练的使用一些辅助工具,那么就可以事半功倍,大大的提高工作效率,何乐而不为呢。

假设你是一个武林高手,如果再能得到一个神兵利器,那么是不是可以天下无敌了呢。

你的编程水平很高,能够使用各种模式来避免重复代码,如果再能熟练的使用VS(快捷键)、代码生成器等工具,那么恭喜你,终于可以从大量重复的体力劳动工作中解脱了,终于,整个世界清静了。

以上几种只是我比较常用的方法,消灭重复代码编写的方法还有很多。如果你有比较好的方法,那么希望你能分享出来,本人必将不胜感激。

我是缘生梦,谢谢您的关注!

posted on 2014-02-22 22:02  缘生梦  阅读(10678)  评论(24编辑  收藏  举报