Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2015-08-20T03:50:56.236548+00:00BlogIntellij IDEA 重构——提炼函数2014-07-14T12:53:27+00:002015-08-20T03:50:56.236548+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/intellij-idea-refactor-extract-method/Intellij IDEA带了一些有意思的快捷键,或者说自己之前不在意这些快捷键的存在。重构作为单独的一个菜单,显然也突显了其功能的重要性,说说**提炼函数**,或者说提出方法。
##重构之提炼函数
快捷键
Mac: ``alt``+``command``+``M``
Windows/Linux: ``Ctrl``+``Alt``+``M``
鼠标: Refactor | Extract | Method
###重构之前
以重构一书代码为例,重构之前的代码
public class extract {
private String _name;
void printOwing(double amount){
printBanner();
System.out.println("name:" + _name);
System.out.println("amount" + amount);
}
private void printBanner() {
}
}
###重构
选中
System.out.println("name:" + _name);
System.out.println("amount" + amount);
按下上述的快捷键,会弹出下面的对话框
![Extrct Method][1]
输入
printDetails
那么重构就完成了。
###重构之后
IDE就可以将方法提出来
public class extract {
private String _name;
void printOwing(double amount){
printBanner();
printDetails(amount);
}
private void printDetails(double amount) {
System.out.println("name:" + _name);
System.out.println("amount" + amount);
}
private void printBanner() {
}
}
##Intellij IDEA重构
还有一种就以Intellij IDEA的示例为例,这像是在说其的智能。
public class extract {
public void method() {
int one = 1;
int two = 2;
int three = one + two;
int four = one + three;
}
}
只是这次要选中的只有一行,
int three = one + two;
以便于其的智能,它便很愉快地告诉你它又找到了一个飞盘
IDE has detected 1 code fragments in this file that can be replaced with a call to extracted method...
便返回了这样一个结果
public class extract {
public void method() {
int one = 1;
int two = 2;
int three = add(one, two);
int four = add(one, three);
}
private int add(int one, int two) {
return one + two;
}
}
然而我们就可以很愉快地继续和它玩耍了。当然这其中还会有一些更复杂的情形,当学会了这一个剩下的也不难了。
###代码
[https://github.com/gmszone/refactor](https://github.com/gmszone/refactor)
[1]: /static/media/uploads/extract-method.png实习半年后:正在变得高效2014-05-18T02:01:10+00:002014-10-15T15:50:14.154597+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/thoughtworks-intern-how-to-be-a-zen-programmer/实习就这样已经接近半年了,偶然间发现自己的效率相比有很大的提高,或许正在接近于一个所谓的``专业程序员``。
于是录制了一个视频,不过有意思的是这个视频一开始的目的是写``PyCharm``下的``Django``,里面用的是``Mezzanine``。``PyCharm``与我们在工作中用的``Intellij Idea``都是出自于``Jetbrains``的,相似的地方太多了,所以自然也可以用那个来写。只是Python做的项目不多,没有理解好应该怎样用Python的方式写,但是可以足够简单也是Python的方式。
##0. 键盘 VS 鼠标
这似乎是一个永恒的话题,于是丢个传送门吧,录制的一个视频,用以表达键盘的快捷。
视频地址:[PyCharm Django](http://v.youku.com/v_show/id_XNzEzMjg2MTM2.html)
视频中用的IDE是``PyCharm``
如果你的语言是Java,可以试试``Intellij Idea``,或者你已经在用了。有一篇之前关于重构的文章[重构与Intellij Idea初探](http://www.phodal.com/blog/thoughtworks-refactor-and-intellij-idea/),如标题所说这里只是初探。
###键盘快速启动工具
Linux/Windows上有诸如``launchy``之类的工具
Mac 上有``alfred``
###快捷键
多数工作过程都需要我们对快捷键有很好的了解,如在视频中用到的
``SHIFT+F6`` 重命名
``Command+E`` 切换最近文件
``Alt+C`` 关闭对话框
``SHIFT+Alt+Command`` 重构
##1. Vim VS PyCharm
这里并没有真正的好与话,以重构的角度来说``PyCharm``很不错,Vim应该也有``Refactor``,只是没有研究过,更喜欢``Emacs``。
上次当我在追求一个更好的工具的时候,发现似乎迷失了自己,于是也就有了[音乐应在你的指尖流淌——工具和代码无关](http://www.phodal.com/blog/think-of-rework-4-best-tool/)这篇文章。
如文中所说
> “好的装备确实能带来一些帮助,但事实是,你的演奏水平是由你自己的手指决定的。”
我们的编程水平是由我们决定的,好的编辑器或许能带来帮助,但是实际上真实的能力不会因为编辑器有太多改变的。至于Vim还是PyCharm这是一个有些许定论的问题,但是在工作时通常是这样子的
使用Vim
- 快速地改几个字符
- 服务器维护
- 一些工作以外的项目
使用IDE
- 项目开发(这是一个遗留系统)
- 对某些语言、构架的细节不够了解
- 嵌入式开发(在学校)
只是使用Sublime的情况就有点意思了
- Format Code
- Emmet(Zen Coding)
- subl .
- 临时保存
##2.打磨工具 VS 等更好的工具
这里以``Zsh``和``Bash``为例,都是``Shell``工具,某种意义上来说Zsh会比BASH强大,正如IDE之于Vim,但是也有性能问题,而这些不是讨论的重点。重点是我们应该去学会真正的使用工具。
工具的好坏大多数时候不都取决于工具,而取决于人的使用。我们不能把锤子拿来当擦玻璃,也不能拿布来钉钉子,我们很容易在生活中决定我们的工具。但是在工作中,我们可能没办法选择我们的工具。
没有更好的工具,除非我们已经打算自己写一个工具,工具与工具有太多的不同之处,我们能做的就是将一个工具打造得符合自己的习惯。打磨工具对于一个工匠来说是很重要的,我们需要去将习惯、方法等融入工具之中。
于是我开始去打造符合自己习惯的``bash``,视频中用到的两个工具``bash completion``与``bash powerline``,以及提醒用的``terminal notifier``。
[mac os 下添加bash completion](http://www.phodal.com/blog/mac-os-bash-completion-bash-autocomplete/)
[mac os powerline 在bash在使用powerline](http://www.phodal.com/blog/mac-os-bash-powerline-configure-install/)
[mac os terminal notifier 用terminal-notifier替代growl](http://www.phodal.com/blog/mac-os-use-terminal-notifier-repace-growl-with-iterm2/)
##3.工作以外
总会很多东西值得我们去玩味,不能仅仅是编程,只是当前仍处于学习阶段。
好玩的事情有太多太多,将我们的时间一味地用于编程不一定会事倍功倍,有时可能会是事半功倍。当我们把自己的时间投入到别的时候,也许此时我们的大脑的潜意识等来在帮我们思考着问题:
> 灵感总是在不工作的时候迸发出来的。
最近,我正在
- 看《全职猎人2011》
- 学习内容营销、自媒体
- 练习手绘板
- 持续写作
- 忙于[寻ta驿站](http://xunta.phodal.net)的内容思考
日常的生活有很多部分,八小时一天的工作之外,总会有些想玩想做的事,做些和编程无关的事、电脑无关的事,那么工作的时候才能更好的工作。ThoughtWorks 实习记——重构与Intellij Idea初探2014-01-18T17:28:51+00:002014-09-21T01:20:37.681338+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/thoughtworks-refactor-and-intellij-idea/是时候讨论这个Refactor利器了,最初看到这个重构的过程是从ThoughtWorks郑大晔校开始的,只是之前对于Java的另外一个编辑器Eclipse的坏感。。这些在目前已经不是很重要了,试试这个公司里面应用广泛的编辑器。
##开发过程##
开发的流程大致就是这样子的,测试先行算是推荐的。
编写测试->功能代码->修改测试->重构
上次在和buddy聊天的时候,才知道测试在功能简单的时候是后行的,在功能复杂不知道怎么手手的时候是先行的。
##Interllij Idea重构##
开始之前请原谅我对于Java语言的一些无知,然后,看一下我写的Main函数:
package com.phodal.learing;
public class Main {
public static void main(String[] args) {
int c=new Cal().add(1,2);
int d=new Cal2().sub(2,1);
System.out.println("Hello,s");
System.out.println(c);
System.out.println(d);
}
}
代码写得还好(自我感觉),先不管Cal和Cal2两个类。大部分都能看懂,除了c,d不知道他们表达的是什么意思,于是。
###Rename##
**快捷键:Shift+F6**
**作用:重命名**
- 把光标丢到int c中的c,按下shift+f6,输入result_add
- 把光标移到int d中的d,按下shift+f6,输入result_sub
于是就有
package com.phodal.learing;
public class Main {
public static void main(String[] args) {
int result_add=new Cal().add(1,2);
int result_sub=new Cal2().sub(2,1);
System.out.println("Hello,s");
System.out.println(result_add);
System.out.println(result_sub);
}
}
###Extract Method###
**快捷键:alt+command+m**
**作用:扩展方法**
- 选中System.out.println(result_add);
- 按下alt+command+m
- 在弹出的窗口中输入mprint
于是有了
public static void main(String[] args) {
int result_add=new Cal().add(1,2);
int result_sub=new Cal2().sub(2,1);
System.out.println("Hello,s");
mprint(result_add);
mprint(result_sub);
}
private static void mprint(int result_sub) {
System.out.println(result_sub);
}
似乎我们不应该这样对待System.out.println,那么让我们内联回去
###Inline Method###
**快捷键:alt+command+n**
**作用:内联方法**
- 选中main中的mprint
- alt+command+n
- 选中Inline all invocations and remove the method(2 occurrences) 点确定
然后我们等于什么也没有做了~~:
public static void main(String[] args) {
int result_add=new Cal().add(1,2);
int result_sub=new Cal2().sub(2,1);
System.out.println("Hello,s");
System.out.println(result_add);
System.out.println(result_sub);
}
似乎这个例子不是很好,但是够用来说明了。
###Pull Members Up###
开始之前让我们先看看Cal2类:
public class Cal2 extends Cal {
public int sub(int a,int b){
return a-b;
}
}
以及Cal2的父类Cal
public class Cal {
public int add(int a,int b){
return a+b;
}
}
最后的结果,就是将Cal2类中的sub方法,提到父类:
public class Cal {
public int add(int a,int b){
return a+b;
}
public int sub(int a,int b){
return a-b;
}
}
而我们所要做的就是鼠标右键
**Refactor->Pull Members Up**
###Pull Members Down###
将方法推迟到子类
###其他###
正在补充学习中
##结论##
Intellij Idea自带的重构功能似乎真的很强大,其他目前感觉很强大的东西,比如Live Template,丢到下次讨论。Android Studio Windows,Windows上使用Android Studio2013-05-16T21:17:45+00:002014-07-21T13:51:29.629142+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/android-studio-windows/Android Studio Windows
----
所以这就是在Windows上的最后的效果图。。
<img src="http://img.blog.csdn.net/20130516205459524" width="600"/>
Android Studio很强大。以至于,我们可以不需要修改直接导入项目 。
(转载请标注:源自;Phodal's Blog)
<img src="http://img.blog.csdn.net/20130516205655426" width="600"/>-
如图所示的actionbarSherlock及SlidingMenu是自动导入的。
<img src="http://img.blog.csdn.net/20130516210234483"/>
Android Studio安装要点
----
注意:
----
----
windows需要设置环境变量JDK_HOME,JAVA_HOME,ANDROID_STUDO_SDK确保这几个的存在。示例如下:
JDK_HOME
C:\Program Files\Java\jdk1.7.0_21
JAVA_HOME
C:\Program Files\Java\jre7
ANDROID_STUDO_SDK
D:\Program Files (x86)\Android\android-studio
也就是不含bin
Android Studio项目
-----
首先我们要迎接的是Welcome to Android Studio
<img src="http://img.blog.csdn.net/20130516210317939"/>
接下来就是导入项目。
<img src="http://img.blog.csdn.net/20130516210317939"/>
我的是在D盘的Hug8217
<img src="http://img.blog.csdn.net/20130516210457771"/>
存在的库
<img src="http://img.blog.csdn.net/20130516210518357"/>
SDK地址。。
<img src="http://img.blog.csdn.net/20130516210547734"/>
最后
Enjoying Android Studio
----
<img src="http://img.blog.csdn.net/20130516210633349"/>