“再一次问好。”
“你好!”
“今天我要给大家讲讲重构。重构就是在不改变项目功能的情况下改变项目中的代码。”
“但这怎么可能?”
“好吧,在最简单的情况下,我们可以重命名变量和/或方法。毕竟,更改变量的名称不会使程序运行不同,不是吗?”
“当然不是。”
“你也可以将大型方法分解成几个较小的方法。 ”
“您可以将重复的代码片段提取到一个单独的方法中。 ”
“一些函数可以声明为静态的,然后移到实用程序类中。”
“但这是对重构的狭义解释。”
“重构有时意味着在不添加新功能的情况下重写(改进)项目的架构。这是广义上的重构。”
“IntelliJ IDEA 成为最流行的集成开发环境 (IDE),特别是因为它率先引入了非常强大的重构工具。”
“这些法器是什么?”
魔术 #1:更改方法的名称。
“想象一下,您的代码有一个从 100-500 个不同地方调用的方法。您决定将其名称更改为更容易理解的名称。假设它是 run(),而您希望它是 runDownloadTaskAsync()。多快你能做到吗?
“嗯,首先你需要改变方法的名称,然后找到程序中所有调用该方法的地方,并在那里也改变名称。”
“你怎么找到那些地方?”
“我只需运行该程序,IntelliJ IDEA 就会向我展示调用不存在的方法的所有位置。”
“好吧。但是现在假设每个方法都有一个解释性注释 (JavaDoc) 来解释该方法的作用——并且旧的方法名称写在那里。”
“我也会改变评论。”
“但也可能有一些变量的名称与方法的名称相关联。最好也更改它们:”
前 | 后 |
---|---|
|
|
“是的,最好也更改那些变量的名称。不会有什么坏处。”
“嗯,所有这些都可以使用 IntelliJ IDEA 在几秒钟内完成!”
“您将光标放在方法名称上(或用鼠标单击它),然后按Shift+F6并开始键入所需的方法名称。”
“这是一个编辑方法名称的示例。”
“开始编辑:”

“指定一个新名称:”

“只要输入一个新名称,回车,就可以了。这个方法在项目中被调用的任何地方都会被重命名。”
“IntelliJ IDEA 通常还会询问您是否要在注释中重命名变量名和方法名。只需单击“是”,它就会改变一切。”
“更何况,如果项目在本次重构操作之前编译通过,那么重构之后也能保证编译成功。”
“听起来很有希望。”
“顺便说一句,您可以用同样的方式更改变量名称。单击一个名称后,只需按Shift+F6——然后您可以输入一个新名称,IntelliJ 将在任何使用的地方更改变量名称。 ”
“如果变量是类中的一个字段并且有一个 getter 和一个 setter,那么 getter 和 setter 的名称也会更改以匹配变量的新名称。”
“我尝试使用变量。一切都像你说的那样工作,Ellie。重构太棒了!”
“你认为重构就是全部吗?重构是一个如此广泛的话题——我们甚至还没有触及表面。”
“哇。还有什么?”
魔术 #2:提取变量。
“有时某些表达式在代码中经常重复,以至于您需要将它们移到一个单独的变量中。例如:”
public void printInfo(User user)
{
System.out.println(user.getProfile().getName());
System.out.println(user.getProfile().getAddress().getState());
System.out.println(user.getProfile().getAddress().getCity());
System.out.println(user.getProfile().getAddress().getStreet());
System.out.println(user.getProfile().getAddress().getHomeNumber());
}
public void printInfo(User user)
{
Address address = user.getProfile().getAddress();
System.out.println(user.getProfile().getName());
System.out.println(address.getState());
System.out.println(address.getCity());
System.out.println(address.getStreet());
System.out.println(address.getHomeNumber());
}
“啊。”
“而且代码可能会复杂得多,有很多重复的部分。”
“程序员不会故意那样写。但你经常需要向方法中添加一些东西,然后再添加其他东西——随着时间的推移,重复的次数会飙升。”
“通过创建一个单独的变量,我们可以给它一个合适的名字并提高代码的可读性。”
“例如,在上面的例子中,也许我们不是在谈论家庭地址。也许我们在谈论紧急联系人的地址。然后你可以调用这个变量 emergencyContactAddress,而不仅仅是地址。然后,一个程序员第一次看到这段代码就会明白这里发生了什么。”
“是的,我同意。添加这样的变量是有道理的。”
“你是怎么做到的?”
“将一个表达式移动到一个单独的变量中非常简单。”
第一步:用鼠标选择表达式。

第 2 步:按 Ctrl+Alt+V

“打开一个窗口,IntelliJ IDEA 会询问我们是要仅替换选定的表达式还是替换表达式的所有实例(出现 4 次)?”
“选择第二个选项来替换所有出现(替换所有 4 次出现)”
第 3 步:按回车键。

“IntelliJ IDEA 会提示您输入一个变量名。它也会对名称提出自己的建议。不错,嗯?”
“嗯嗯,对了,我们还打算给变量命名为‘地址’,它是怎么知道的?”
“通过在表达式中使用最后一个方法的名称,它返回一个地址。因此,变量很可能将用于存储地址。”
“结果真的很好。太棒了,艾莉。”
魔术 #3:将代码提取到一个单独的方法中。
“但我们本可以做其他事情。我们可以声明一个新方法,例如printAddress (),然后将所有这些代码移入其中。”
“我们试试吧。”
第 1 步:选择使用地址变量的 4 行代码:

第 2 步:按 Ctrl+Alt+M

“IntelliJ IDEA 确定该方法需要哪些变量,并建议它应该是什么样子。“唯一剩下的就是为该方法输入一个名称。
第 3 步:输入 printAddress 作为方法名称,然后按 Enter 键。

“你觉得如何?”
“太棒了。IntelliJ IDEA 不仅将代码提取到一个单独的方法中,还添加了所有必需的变量。而且,它猜对了所有名称。”
GO TO FULL VERSION