提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:鲍佳佳|2020-12-17 11:29:47.507|阅读 354 次
概述:简化代码具有很多优势,包括提高可读性,解决技术难题以及管理不断变化的需求。我们将在此博客中介绍三种重构类型:提取和内联,更改签名,重命名。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
IntelliJ IDEA 2020.3提供了许多实用的功能,例如调试时的交互式提示,Git暂存支持,对Java 15记录和密封类的扩展支持等等。它简化了端点,框架和事件探查器的日常工作。通过基于机器学习技术的更好的代码完成,更直观和有用的新的“Welcome”屏幕以及更好的拼写和语法检查,整个UX得到了改进。简而言之,一切都更好!
这篇博客文章涵盖了与视频相同的内容,并包含一些其他提示和技巧。
简化代码具有很多优势,包括提高可读性,解决技术难题以及管理不断变化的需求。我们将在此博客中介绍三种重构类型:
提取和内联
简化代码的第一种方法是提取它。您可以在IntelliJ IDEA中执行五种类型的提取重构:
提取方法
此方法中的switch语句与该方法的其余部分不一致。
public class PlanetExtractions { Planet myPlanet = new Planet("earth"); // I'm using PlanetExtractions to get the facts for my country // I'm using planetextractions to get the facts for my country private void printPlanetFacts(final String country) { System.out.println("Planet name is " + myPlanet.getName()); System.out.println("Current season is " + myPlanet.getCountryWeather()); System.out.println("Number of times the planet rotates around the sun is " + 365); System.out.println("Number of characters in planet name = " + myPlanet.getName().length()); switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println("The weather is warm in the UK"); case "Summer" -> System.out.println("The weather is hot in the UK"); case "Autumn" -> System.out.println("The weather is cool in the UK"); default -> System.out.println("The weather is cold in the UK"); } } }
在2020.3中,此过程已简化。您需要选择要提取的完整代码块,然后可以在macOS上使用⌘⌥M,在Windows和Linux上使用Ctrl + Alt + M来提取方法。
我们可以给新方法起一个名字,例如,getWeather()并且IntelliJ IDEA将用对我们新方法的调用替换原始逻辑:
public class PlanetExtractions { public static final int NUMBER_OF_DAYS_IN_A_YEAR = 365; Planet myPlanet = new Planet("earth"); private String theWeatherIs = "The weather is"; // I'm using PlanetExtractions to get the facts for my country // I'm using planetextractions to get the facts for my country private void printPlanetFacts(final String country) { System.out.println("Planet name is " + myPlanet.getName()); System.out.println("Current season is " + myPlanet.getCountryWeather()); System.out.println("Number of times the planet rotates around the sun is " + NUMBER_OF_DAYS_IN_A_YEAR); System.out.println("Number of characters in planet name = " + myPlanet.getName().length()); getWeather(); } private void getWeather() { switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println("The weather is warm in the UK"); case "Summer" -> System.out.println("The weather is hot in the UK"); case "Autumn" -> System.out.println("The weather is cool in the UK"); default -> System.out.println("The weather is cold in the UK"); } } }
通过再次使用相同的快捷方式,您可以获取“提取方法”的其他选项。
提示:您可以通过在macOS上使用⌘B或在Windows和Linux上使用Ctrl + B导航到方法的声明或用法。
提取常数
我们可以在此代码行中将数字365提取为常数,因为地球始终需要大约365天才能完成绕太阳的自转:
System.out.println("Number of times the planet rotates around the sun is " + 365);
我们可以选择数字,然后在macOS上使用⌘⌥C,在Windows和Linux上使用Ctrl + Alt + C将其提取为常数。我们可以给它起一个名字,例如 NUMBER_OF_DAYS_IN_A_YEAR。IntelliJ IDEA在课程开始时创建一个新的公共静态最终常量:
public static final int NUMBER_OF_DAYS_IN_A_YEAR = 365;
IntelliJ IDEA还用新的常量替换了原始代码行:
System.out.println("Number of times the planet rotates around the sun is " + NUMBER_OF_DAYS_IN_A_YEAR);
提取字段
在我们提取的方法中,短语“天气是”重复了四次,因此让我们将其提取到字段中:
private void getWeather() { switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println("The weather is warm in the UK"); case "Summer" -> System.out.println("The weather is hot in the UK"); case "Autumn" -> System.out.println("The weather is cool in the UK"); default -> System.out.println("The weather is cold in the UK"); } }
您需要选择The weather is,然后可以在macOS上使用⌘⌥F,或在Windows和Linux上使用Ctrl + Alt + F将其提取到字段中。在“介绍字段”对话框中,我们可以选择在“字段声明”中初始化该字段,为其指定一个名称,例如,theWeatherIs然后选择替换代码中所有四个出现的字段。
当我们按OK时,IntelliJ IDEA在班级顶部创建一个新字段:
String theWeatherIs = "The weather is";
IntelliJ IDEA还使用新字段更新了该方法:
private void getWeather() { switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println(theWeatherIs + " warm in the UK"); case "Summer" -> System.out.println(theWeatherIs + " hot in the UK"); case "Autumn" -> System.out.println(theWeatherIs + " cool in the UK"); default -> System.out.println(theWeatherIs + " cold in the UK"); } }
提取变量
这样的链接方法可能很难理解,因此让我们将其重构为一个单独的变量:
int planetNameLength = myPlanet.getName().length();
您可以将光标放在链接的方法调用中,然后使用箭头键选择要提取到新变量的数量。
让我们提取myPlanet.getName().length()部分。我们可以在macOS上使用⌘⌥V,在Windows和Linux上使用Ctrl + Alt + V将其提取为变量并命名 planetNameLength。现在我们有了一个用于此计算的局部变量:
System.out.println("Planet name is " + myPlanet.getName().length());
IntelliJ IDEA还创建了我们的新变量:
int planetNameLength = myPlanet.getName().length();
…并用新变量替换了我们的代码:
System.out.println("Number of characters in planet name = " + planetNameLength);
提取参数
让我们UK在此代码中提取国家/地区,并将其作为参数传递给country:
private void getWeather() { switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println(theWeatherIs + " warm in the UK"); case "Summer" -> System.out.println(theWeatherIs + " hot in the UK"); case "Autumn" -> System.out.println(theWeatherIs + " cool in the UK"); default -> System.out.println(theWeatherIs + " cold in the UK"); } }
为此,让我们选择UK并在macOS上使用⌘⌥P,在Windows和Linux上使用Ctrl + Alt + P。我们可以给它起一个名字,例如country。我将要求IntelliJ IDEA替换所有四个实例,然后选择“重构”。IntelliJ IDEA更新了我们的方法签名参数:
getWeather("UK");
…并替换其在文本中的所有四个出现:
private void getWeather(String country) { switch (myPlanet.getCountryWeather()) { case "Spring" -> System.out.println(theWeatherIs + " warm in the " + country); case "Summer" -> System.out.println(theWeatherIs + " hot in the " + country); case "Autumn" -> System.out.println(theWeatherIs + " cool in the " + country); default -> System.out.println(theWeatherIs + " cold in the " + country); } }
摘录摘要
提取重构的快捷方式具有对称性,可以帮助您记住它们。
对于macOS,它们是⌘⌥ +您要提取的内容的首字母,对于Windows和Linux,它们是Ctrl + Alt +您要提取的内容的首字母:
是的,我知道这在技术上是五合一的,但是我真的想向您展示快捷方式的对称性,因为它有助于我更快地学习。在继续进行第二种主要重构类型之前,如果您改变主意,并且要内联先前提取的内容,该怎么办?在下文中我将详细讲解这个问题!
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
IntelliJ在业界被公认为优秀的Java开发平台之一,在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面表现突出,并支持基于Android平台的程序开发。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢