做一个不复制粘贴的程序员[0]: 概述
前言
Perl语言之父拉里·沃尔曾说过程序员有三大美德:懒惰、急躁、傲慢,很多程序员在平时工作中常常做很多重复的事情,写很多重复的代码,如果有懒惰的思想,就可以避免很多重复,从而提高开发效率,增加编程乐趣,我们需要的是一种智慧的懒惰。
举个生活中重复的例子,我们会关注一些大佬的博客,为了看他们有没有更新博文,我们经常会挨个点进他们的博客主页。如果会用RSS的话,只要点进RSS客户端首页,就能看到哪些博主有了新的文章。生活中重复的例子还有很多,本系列文章只谈谈编程中的重复。
说到代码层面的重复,不得不提起一个著名的软件设计原则:DRY(Don’t Repeat Yourself),大概说的是应该避免重复的代码。不过也有人写过《DRY原则的危害》的文章,主要说不要过度抽象,不要太教条。我觉得各种技术、思想、原则,如果正确地使用都会有好处的,反之则会带来一些危害,如果不会用那不如不用。
重复的危害大家应该都有体会,比如浪费时间、不利于重构、容易出错等。选择复制粘贴其实也是一种懒惰,懒于思考,这会让我们工作十年,每年写的是一样的代码,一直没有进步。顺带提一下复制粘贴的技巧,有种叫历史粘贴板的东西,IDEA和Win10都有这个功能。
Talk is cheap. Show me the code.
下面举一个避免复制粘贴的代码例子,这其实属于后面第四篇文章所谈的代码生成。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); } }
本系列的目录
给自己挖个坑,后面博文从以下方面谈谈如何做一个不复制粘贴的程序员:
- 提取方法
- 使用模板模式
- 使用AOP
- 代码生成
- 拼图游戏 复制粘贴一个叫lemene的人的,这个人是c++博客的用户,我不是,怕以后找不到这篇文章,所以复制粘贴了。文中最后给出了原文链接连接
- vim中如何复制当前文件内容粘贴到另外一个文件的命令
- vim 快速选中并复制粘贴替换一个单词
- vi里面用鼠标复制了一个单词,粘贴用什么键?
- 使用robot封装一个模拟键盘复制粘贴并按下回车的方法
- 用有名管道实现文件复制,有两个终端 ,一个进行复制操作,另一个进行粘贴操作
- c#+Winform实现自定义的“复制、粘贴”右键快捷菜单,多个控件共享使用一个右键菜单
- UIMenuController/UIPasteboard(1) 制作一个可以粘贴复制的Label
- 做一个程序员需要哪些基本知识----网上看到的,觉得不错,就复制下来了
- 在新建Word文档后,复制某处的文字,并在新的WORD里面粘贴,出现一个图标:m2(m平方)!【解决办法】
- 在Myeclipse中复制一个没有语法错误及其其他错误项目后再粘贴项目到工作区出现的语法报错问题 关键字:java & web project
- 自己做的一个游戏 先不要看程序 想玩的自己复制粘贴运行 不然就没意思了
- 【Java生成二维码】java生成和解析二维码,只用一个jar包,QRCODE,可复制粘贴直接用
- 自己写了一个支持粘贴复制,类似excel的jquery table小插件
- 复制、粘贴一个物体的所有组件
- vim快速选中并复制粘贴替换一个单词
- tmux 一个终端多个窗口 复制粘贴
- 【来日复制粘贴】以符号作为换行依据将一个单元格具有分隔符的一串数据变成数排
- c#+Winform实现自定义的“复制、粘贴”右键快捷菜单,多个控件共享使用一个右键菜单。
- 分享一个网站,代码交流平台的,免的费神向ide复制粘贴又粘贴到论坛!