劣质代码的产生原因(3)编程环境不熟悉
产生劣质代码的另外一个原因是对编程环境的不熟悉。
原本想简略讲一讲这一章的,网上关于如何使用IDE的文章到处都是,特意写这么一章给人一种凑数的感觉。但是,回到现实当中,当我发现有这样一些行为的时候,深感对于编程环境的不熟悉是一个造成不能集中精力去思考的很重要的原因之一。
这些行为是(在Eclipse里):
1. 从行尾移动到行首:
不停地按左键。
正确的方法是按Home
2. 为某个变量改名:
拖动滚动条,肉眼搜索,然后用Backspce删除找到的单词,再把复制的名字粘贴进去。
正确的方法是双击变量,按Alt + Shift + R,然后改名
3. 某个长方法中的一段想要提出来,变成另外一个方法:
写一个空方法,然后把要提出的部分剪切到空方法里,发现编译错误,例如:变量未找到之类的,然后再逐步修改。再去查找是否有相同的地方,逐个的删掉。
正确的方法是选中要提出的部分,按Alt+Shift+M,然后写上新方法的签名,其他相同的地方也都自动修正完了。
4. 想要跳跃到指定行号:
拼命地按Ctrl +G,无果。然后拖动滚动条,然后点击附近的每一行,直到找到位置。
正确的方法是按Ctrl + L,然后输入行号
5. 想要找到某个方法的声明:
按Ctrl + F,输入方法名称,查找,查找下一个,直到找到声明为止。
正确的方法是,在Outline中按名称排序,然后迅速找到。
6. 把某行前头空白设置为Tab:
移动到行首,然后逐个的按Tab,再把原来的空白删掉。
正确的方法是,选中行首的空白,按Ctrl + Shift + F。更正确的方法是对整个文件设置:保存后动作为自动Format。
既然有这么多对于IDE不熟悉的行为,我们还是来讲一下一些重要的IDE功能吧,其他的就留给读者自己查找吧。
以Eclipse为例,即使用了3-5年的程序员也未必知道一些功能:
1. Refactor
用Source -> Generate Getter and Setter的应该不在少数,就在Source下面有一个Refactor菜单,就很少有人问津了。
“Refactor是啥意思?” 这也许是很多从未用过这个功能的人的第一反应。查字典,搜百度,才知道——重构。
我们不去解释重构的意思了。
常用的改名(Rename),提取方法(Extract Method),修改方法签名(Change Method Signature)的方法在上面的例子中已经从提到了。
此外,介绍一些常用的功能。
a. Pull Up,将各子类中重复调用的方法提取到父类里,从而减少重复代码的数量,使之符合DRY原则。
b. Introdue parameter object,将长参数列表变成一个对象来使用,这样做可以减少参数个数,并且采用对象访问,让代码更加容易理解,但是合并的时候需要注意不要把不想关的内容合并到一起。
c. Move,将方法移动到合适的类中去,这样做可以让代码满足单一职责原则。
d. Introduce Factory,生成工厂类,来替代new。当多个工厂方法在同一个工厂类里出现的时候,就可以考虑采用Extract Method将他们合并。还可以再利用反射将方法合并的更加完美。
2. Quick Fix
当我们写了一段有问题或者不够好的代码的时候,IDE会自动为我们产生提示。
当我们想要修改这些不完美地方时,可以使用Quick Fix。
情形1 : 对于一个不存在的方法的调用,会产生的提示有:
a. Create method ...
b. Change to ...
c. + Add argument to match ...
d. - Remove argument to match ...
这些都为我们提供了快捷的修改该类问题的方法
情形2: 对于一个静态调用写成了 实例.域 的形式
a. Change access to static using ...
b. remove 'static' modifier to ...
举例到此为止。Quick Fix为我们提供了非常丰富的快速修改代码的方法,读者还可以根据实际代码的情况,阅读各种Quick Fix菜单,以更好的修改代码使之变得更加易读易懂。
3. Auto Completion
当书写一个变量的时候,如果它的名称很长,就容易出错,幸好Eclipse提供了自动完成功能。
想要调用一个方法或者一个域变量,可以用“.开头”,写一个.号,然后当前类能够直接调用的域和方法都会被列出来,然后就可以选择想要调用的对象。再删除.号就可以了。或者可以写this.,那就不用删除了。关于this,在以后的章节中会讨论。
Ctrl + Space
4. Auto Format
可以在属性对话框中设置保存动作中包含自动格式化。可以自动调整对齐、缩进等格式,也可以自动补充imports。
5. Task List
有些时候我们有些代码暂时不能定下来,留待以后完善的时候,需要将它们做出标记。有些人会加上一些自定义的符号以便后续检索。
但是IDE已经为我们提供了这个功能。当我们为代码加上//FIXME , //TODO或者//XXX的注释的时候,这些注释就会在Task List中出现。