• VS开发中的代码编写小技巧——避免重复代码编写的几种方法


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

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

    大量重复代码——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(快捷键)、代码生成器等工具,那么恭喜你,终于可以从大量重复的体力劳动工作中解脱了,终于,整个世界清静了。

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

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

  • 相关阅读:
    [JavaScript] ObjectiveC参数列表语法转换工具。可转为UML或C++语法,用于绘制UML
    ccpuid:CPUID信息模块 V1.01版,支持GCC(兼容32位或64位的Windows/Linux)
    [C++] 测试硬件popcnt(位1计数)指令与各种软件算法,利用模板实现静态多态优化性能
    [C] zintrin.h: 智能引入intrinsic函数 V1.02版。支持VC2012,增加INTRIN_ALIGN、INTRIN_COMPILER_NAME宏
    [C] 让VC、BCB支持C99的整数类型(stdint.h、inttypes.h)(兼容GCC)
    [C#] TestHttpPost:测试Http的POST方法的小工具
    [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
    GCC中的Intrinsics头文件与SIMD指令集、宏、参数的对应表
    [VC] ccpuid:CPUID信息模块。范例:显示所有的CPUID信息
    [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • 原文地址:https://www.cnblogs.com/hbccdf/p/methodofavoidtowriterepeatcode.html
Copyright © 2020-2023  润新知