鴻蒙開發(fā):DevEcoStudio中的代碼提取

前言

本文基于DevEco Studio 5.0.5 Release

有這樣的一個(gè)場(chǎng)景,當(dāng)你初始寫UI的時(shí)候,沒有考慮到后面的代碼復(fù)用,想要把一段重復(fù)的組件屬性進(jìn)行抽成一個(gè)方法?該如何快速的執(zhí)行?再舉一個(gè)常見的場(chǎng)景,一個(gè)函數(shù),你寫了很多的代碼,想要把一部分代碼,快速的抽成一個(gè)單獨(dú)的函數(shù),用于簡(jiǎn)化當(dāng)前的代碼邏輯,如何快速的實(shí)現(xiàn)?可能很多老鐵會(huì)第一時(shí)間想到,把代碼復(fù)制出來唄,這有什么難的?雖然手動(dòng)復(fù)制出來可以實(shí)現(xiàn),但是未免太浪費(fèi)時(shí)間了,本篇文章就告訴大家一個(gè)便捷的方式來實(shí)現(xiàn),那就是DevEcoStudio中的代碼提取。

舉一個(gè)很簡(jiǎn)單的例子,如下代碼,如何快速的把Text組件設(shè)置的屬性,快速的抽成一個(gè)函數(shù)調(diào)用呢?

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text("我是測(cè)試內(nèi)容1")
        .fontColor(Color.Red)
        .fontSize(16)
        .fontWeight(FontWeight.Bold)
    }.width('100%')
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

很簡(jiǎn)單,只需要選中你要抽取的屬性,右鍵選擇Refactor,然后選擇Extract Method...即可,它便會(huì)自動(dòng)抽成一個(gè)擴(kuò)展組件樣式函數(shù)。

執(zhí)行結(jié)果如下:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text("我是測(cè)試內(nèi)容1")
        .newExtend()
    }.width('100%')
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}


@Extend(Text)
function newExtend() {
  .fontColor(Color.Red)
  .fontSize(16)
  .fontWeight(FontWeight.Bold)
}

動(dòng)態(tài)效果如下:

在執(zhí)行完Extract Method之后,擴(kuò)展樣式函數(shù)是帶有方框的,我們可以在方法上進(jìn)行更改名字,它會(huì)自動(dòng)同步生成的函數(shù)進(jìn)行更改。

有一點(diǎn)需要說明,如果你是私有的屬性,也就是組件本身自己的屬性,一般它會(huì)直接生成@Extend修飾的函數(shù),如果是通用屬性,可提取為@Styles或@Extend裝飾的函數(shù)。

如下所示,我選中的是通用的屬性,就可以看到給出要選擇的生成選項(xiàng):

提取新方法/函數(shù)(Method)

在前言中,我們簡(jiǎn)單列舉了一個(gè)例子,快速實(shí)現(xiàn)了組件的屬性函數(shù)生成,這種提取方式,就是方法提取,除此之外,在實(shí)際的開發(fā)中,我們不僅可以提取屬性,也可以提取組件。

我們可以把一個(gè)重復(fù)的組件進(jìn)行提取,方便頁(yè)面進(jìn)行復(fù)用,或者簡(jiǎn)化代碼層級(jí),都可以進(jìn)行對(duì)組件的提取,提取也是很簡(jiǎn)單,和屬性的提取是一樣的,選中你要提取的組件范圍,右鍵選擇Refactor,然后選擇Extract Method...即可,它便會(huì)自動(dòng)抽成一個(gè)@Builder修飾的函數(shù)。

你可以選擇全局或者當(dāng)前頁(yè)面中:

生成的代碼如下:

@Entry
@Component
struct Index {
  build() {
    Column() {
      this.newLocalBuilder()
    }.width('100%')
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }

  @Builder
  newLocalBuilder() {
    Text("我是測(cè)試內(nèi)容1")
      .fontColor(Color.Red)
      .fontSize(16)
      .fontWeight(FontWeight.Bold)
  }
}

以上呢是針對(duì)組件或者組件的屬性進(jìn)行提取,同樣的,如果你想把一個(gè)方法中的邏輯提取成一個(gè)新的方法也是支持的,使用方式和上面一樣,都是選中要提取的代碼。

比如我想把下面的一段代碼進(jìn)行提?。?/p>

提取之后代碼如下:

add(a: number, b: number): number {
    return this.newMethod(a, b)
  }

  private newMethod(a: number, b: number): number {
    return a + b
  }

當(dāng)然了,以上呢只是簡(jiǎn)單的案例,在實(shí)際的開發(fā)中,還請(qǐng)結(jié)合業(yè)務(wù)進(jìn)行提取。

提取變量/常量

變量和常量的提取也是十分的簡(jiǎn)單,都是通過右鍵選擇Refactor,變量的話選擇Extract Variable,常量選擇Extract Constant,比如我要下面的代碼抽成一個(gè)變量:

提取之后代碼如下,同樣的,也有一個(gè)方框,你可以同步進(jìn)行修改變量的名字。

常量和變量唯獨(dú)關(guān)鍵字不一樣,常量是const,變量是let。

相關(guān)總結(jié)

其實(shí)我們看到,還有一個(gè)接口提取,也就是支持選中對(duì)象自變量進(jìn)行提取成接口,使用方式如下:

因?yàn)槟壳暗腁rkTs已經(jīng)不支持這種語(yǔ)法了,一般我們也不會(huì)這樣去寫,所以這個(gè)大家忽略即可。

以上的使用方式是支持快捷按鈕的,系統(tǒng)不一樣,還有自己設(shè)置的快捷鍵不一樣,其快捷方式也不一樣,大家在選擇的時(shí)候,右邊都有提示,記住即可。

本文標(biāo)簽:鴻蒙開發(fā)工具/DevEco Studio

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容