IntelliJ IDEA 2020.3使用教程:重構代碼的3種方法

IntelliJ IDEA 2020.3提供了許多實用的功能,例如調試時的交互式提示,Git暫存支持,對Java 15記錄和密封類的擴展支持等等。它簡化了端點,框架和事件探查器的平常工做。經過基於機器學習技術的更好的代碼完成,更直觀和有用的新的「Welcome」屏幕以及更好的拼寫和語法檢查,整個UX獲得了改進。簡而言之,一切都更好!(本文主要講述「提取」這種方法,點擊查看完整版!)html

下載IntelliJ IDEA 2020.3框架

這篇博客文章涵蓋了與視頻相同的內容,幷包含一些其餘提示和技巧。點擊查看視頻>>機器學習

簡化代碼具備不少優點,包括提升可讀性,解決技術難題以及管理不斷變化的需求。咱們將在此博客中介紹三種重構類型:ide

  • 提取和內聯
  • 更改簽名
  • 重命名

提取和內聯學習

簡化代碼的第一種方法是提取它。您能夠在IntelliJ IDEA中執行五種類型的提取重構:url

  • 提取方法
  • 提取常數
  • 提取字段
  • 提取變量
  • 提取參數

提取方法.net

此方法中的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來提取方法。code

提取方法選擇

咱們能夠給新方法起一個名字,例如,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 +您要提取的內容的首字母:

  • 中號編制方法
  • ç onstants
  • ˚F ields
  • V ariables
  • P arameters

是的,我知道這在技術上是五合一的,可是我真的想向您展現快捷方式的對稱性,由於它有助於我更快地學習。在繼續進行第二種主要重構類型以前,若是您改變主意,而且要內聯先前提取的內容,該怎麼辦?在下文中我將詳細講解這個問題!

相關文章
相關標籤/搜索