Perl语言之父拉里·沃尔曾说过程序员有三大美德:懒惰、急躁、傲慢,不少程序员在平时工做中经常作不少重复的事情,写不少重复的代码,若是有懒惰的思想,就能够避免不少重复,从而提升开发效率,增长编程乐趣,咱们须要的是一种智慧的懒惰。java
举个生活中重复的例子,咱们会关注一些大佬的博客,为了看他们有没有更新博文,咱们常常会挨个点进他们的博客主页。若是会用RSS的话,只要点进RSS客户端首页,就能看到哪些博主有了新的文章。生活中重复的例子还有不少,本系列文章只谈谈编程中的重复。git
说到代码层面的重复,不得不提起一个著名的软件设计原则:DRY(Don’t Repeat Yourself),大概说的是应该避免重复的代码。不过也有人写过《DRY原则的危害》的文章,主要说不要过分抽象,不要太教条。我以为各类技术、思想、原则,若是正确地使用都会有好处的,反之则会带来一些危害,若是不会用那不如不用。程序员
重复的危害你们应该都有体会,好比浪费时间、不利于重构、容易出错等。选择复制粘贴其实也是一种懒惰,懒于思考,这会让咱们工做十年,每一年写的是同样的代码,一直没有进步。顺带提一下复制粘贴的技巧,有种叫历史粘贴板的东西,IDEA和Win10都有这个功能。github
下面举一个避免复制粘贴的代码例子,这其实属于后面第四篇文章所谈的代码生成。Java项目中常常会写不少枚举类,通常这些枚举有两个字段,一是枚举值,对应数据库中存在的字段,二是枚举类型描述,用于展示,并且经常须要一个根据枚举值获取枚举实例的方法。咱们可使用IDE的模板文件功能,只要肯定枚举类名,就能够自动生成全部的模板代码。IDEA配置在"Settings -> Editor -> File and Code Templates -> Files -> Enum"下粘贴如下代码(省略了注释),完整代码见个人Gist: idea-enum-file-template.java. 当须要新建一个枚举类型时,只要在"Create New Class"对话框中输入类名,"Kind"选择"Enum"便可。数据库
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") public enum ${NAME} { ; private final int value; private final String desc; ${NAME}(int value, String desc) { this.value = value; this.desc = desc; } public int getValue() { return this.value; } public String getDesc() { return desc; } private static final Map<Integer, ${NAME}> MAP = Arrays.stream(${NAME}.values()) .collect(Collectors.toMap(${NAME}::getValue, e -> e)); public static ${NAME} getByValue(Integer value) { return MAP.get(value); } }
给本身挖个坑,后面博文从如下方面谈谈如何作一个不复制粘贴的程序员:编程