一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)之ArkTS基礎(chǔ)知識

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-01-24 16:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、ArkTS簡介

ArkTS是HarmonyOS優(yōu)選的主力應(yīng)用開發(fā)語言。它在TypeScript(簡稱TS)的基礎(chǔ)上,匹配了鴻蒙的ArkUI框架,擴展了聲明式UI、狀態(tài)管理等相應(yīng)的能力,讓開發(fā)者以更簡潔、更自然的方式開發(fā)跨端應(yīng)用。了解ArkTS之前,我們需要先了解下ArkTS、TypeScript和JavaScript之間的關(guān)系。

  • JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。
  • TypeScript 是 JavaScript 的一個超集,它擴展了 JavaScript 的語法,通過在JavaScript的基礎(chǔ)上添加靜態(tài)類型定義構(gòu)建而成,是一個開源的編程語言。
  • ArkTS兼容TypeScript語言,拓展了聲明式UI、狀態(tài)管理、并發(fā)任務(wù)等能力,可以認為是TypeScript的超集。
    由此可知,TypeScript是JavaScript的超集,ArkTS則是TypeScript的超集,他們的關(guān)系如下圖所示。

學習ArkTS聲明式的語法之前,需要對TypeScript語法有一個基本的了解,此處不過多的介紹,詳情參考:ArkTS開發(fā)語言簡介

二、ArkTS誕生背景

在語言運行時方面,盡管TS有了類型的加持,但也只是用于編譯時檢查,然后通過TS Compiler轉(zhuǎn)成JS,運行時引擎還是無法利用到基于類型系統(tǒng)的優(yōu)化。

在渲染方面,主流Web引擎由于本身復雜度以及歷史原因,性能、資源占用方面與常見OS原生框架都有一定的差距,尤其在移動平臺上。React Native通過渲染架構(gòu)的改進一定程度上提升了性能體驗,但在平臺渲染效果和能力的一致性,以及JS語言性能等方面還是存在一定的不足。

接著,Google在2018年底推出的Flutter則走了另外一條路,結(jié)合新的語言Dart,引入新的聲明式開發(fā)范式,基于Skia的自繪制引擎構(gòu)建可跨平臺的獨立的渲染能力。這是一種較為創(chuàng)新的方案,但是仍然有一些不足,比如Dart語言增加了學習成本。有意思的是,Google在2021年又推出了新的開發(fā)框架Jetpack Compose,結(jié)合了Kotlin的語言生態(tài),設(shè)計了新的聲明式UI開發(fā)范式。

我們在思考如何構(gòu)建新的應(yīng)用開發(fā)框架的時候,從以下幾個維度進行了重點考慮:

  • 語言生態(tài)
  • 開發(fā)效率
  • 性能體驗
  • 跨設(shè)備/跨平臺能力

由于JS/TS有比較完善的開發(fā)者生態(tài),語言也比較友好,有相應(yīng)的標準組織可以逐步演進,JS/TS語言成了比較自然的選擇。以JS/TS為基礎(chǔ),在開發(fā)框架的維度,我們做了如下的架構(gòu)演進設(shè)計:

  • 通過基于JS擴展的類Web開發(fā)范式,來支持主流的前端開發(fā)方式。同時,在運行時方面,通過渲染引擎的增強(平臺無關(guān)的自繪制機制、聲明式UI后端設(shè)計、動態(tài)布局/多態(tài)UI組件等),語言編譯器和運行時的優(yōu)化增強(代碼預(yù)編譯、高效FFI-Foreign Function Interface、引擎極小化等),進一步提升相關(guān)的性能體驗,并可部署到不同設(shè)備上(包括百KB級內(nèi)存的輕量設(shè)備)。另外,通過平臺適配層的設(shè)計,構(gòu)建了跨OS平臺的基礎(chǔ)設(shè)施。
  • 通過基于TS擴展的聲明式UI開發(fā)范式,提供了更簡潔更自然的開發(fā)體驗。在運行時方面,在上述的基礎(chǔ)上,結(jié)合語言運行時的類型優(yōu)化,以及渲染運行時的扁平化流水線技術(shù)等,進一步提升性能體驗。

下圖描述了ArkUI開發(fā)框架的整體架構(gòu):


可以看到,基于TS擴展的聲明式UI范式中所用的語言就是ArkTS。下面結(jié)合一個具體示例,從應(yīng)用開發(fā)視角簡單介紹下基于ArkTS的全新聲明式開發(fā)范式。例如,下面代碼就是ArkTS聲明式開發(fā)范式(有點類似于Flutter的寫法):

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  build() {
    Column() {
      Text('Hello').fontSize(30)
      Text(this.message).fontSize(30)
      Button(){
        Text('Click Me').fontSize(30)
      }.onClick(()= >{
        this.message='ArkUI'
      })
      .width(200)
      .height(50)
    }
  }
}

這個示例中所包含的ArkTS聲明式開發(fā)范式的基本組成說明如下:

  • 裝飾器
    用來裝飾類、結(jié)構(gòu)體、方法以及變量,賦予其特殊的含義,如上述示例中 @Entry 、 @Component 、 @State 都是裝飾器。具體而言, @Component 表示這是個自定義組件; @Entry 則表示這是個入口組件; @State 表示組件中的狀態(tài)變量,此狀態(tài)變化會引起 UI 變更。
  • 自定義組件
    可復用的 UI 單元,可組合其它組件,如上述被 @Component 裝飾的 struct Hello。
  • UI 描述
    聲明式的方式來描述 UI 的結(jié)構(gòu),如上述 build() 方法內(nèi)部的代碼塊。
  • 內(nèi)置組件
    框架中默認內(nèi)置的基礎(chǔ)和布局組件,可直接被開發(fā)者調(diào)用,比如示例中的 Column、Text、Divider、Button。
  • 事件方法
    用于添加組件對事件的響應(yīng)邏輯,統(tǒng)一通過事件方法進行設(shè)置,如跟隨在Button后面的onClick()。
  • 屬性方法

用于組件屬性的配置,統(tǒng)一通過屬性方法進行設(shè)置,如fontSize()、width()、height()、color() 等,可通過鏈式調(diào)用的方式設(shè)置多項屬性。

總體而言,ArkUI開發(fā)框架通過擴展成熟語言、結(jié)合語法糖或者語言原生的元編程能力、以及UI組件、狀態(tài)管理等方面設(shè)計了統(tǒng)一的UI開發(fā)范式,結(jié)合原生語言能力共同完成應(yīng)用開發(fā)。

三、ArkUI規(guī)劃和演進

接下來,ArkUI會從以下兩個方面進行一些改進:

3.1 更完善的類型系統(tǒng)

已經(jīng)設(shè)計并實現(xiàn)了專門運行時,利用ArkTS的類型輸入,在程序執(zhí)行一開始就獲得較高的運行性能(不像其它傳統(tǒng)JS引擎需要預(yù)熱才能獲取高性能)。但是目前的類型系統(tǒng)在運行時的設(shè)計上仍然考慮了兼容模式,即在運行時,當對象類型發(fā)生變化時會走Bailout機制,以使程序在類型不匹配時仍能正常運行。一種更極致的方式是:引入一種特定模式來支持確定類型的表達,當開發(fā)者可以明確類型時,提供相應(yīng)的信息,這樣運行時可以通過針對性設(shè)計,進一步提升性能體驗。另外,ArkTS將來也會在類型系統(tǒng)中拓展一些新的類型,在與運行時結(jié)合的優(yōu)化中會提供更好的性能體驗。

3.2 更靈活的并行化處理

目前的移動設(shè)備基本都是多核設(shè)備(包括同一配置的多核以及不同配置的大小核),有些設(shè)備還會攜帶多種計算芯片(CPU/GPU/NPU/...)。語言在并發(fā)特性上如何充分應(yīng)用多核設(shè)備甚至異構(gòu)芯片是一個重要的課題。目前我們采用的仍然是業(yè)界常見的類Actor模型的并發(fā)接口——Worker,它彌補了Actor模型的些許劣勢,即允許用戶轉(zhuǎn)移和共享大量的Buffer以避免通信時拷貝的開銷。

但是開發(fā)者仍需自己去管理Worker的生命周期,利用Worker也不能非常方便地觸發(fā)一個異步并行任務(wù)。我們已經(jīng)在嘗試在Actor模型上封裝一種任務(wù)接口,方便用戶更容易利用多核觸發(fā)異步并行任務(wù)。我們也一直在關(guān)注Swift、Dart、Kotlin、Go這些語言并發(fā)特性的發(fā)展和運行時的實現(xiàn),ArkTS的特定模式中靜態(tài)類型模型的引入也會給并發(fā)機制帶來更多高性能實現(xiàn)的可能性,比如對象的凍結(jié)、所有權(quán)轉(zhuǎn)移、值語義等等。我們將持續(xù)致力于提供簡潔高效的并發(fā)API,幫助應(yīng)用開發(fā)者更容易開發(fā)出高性能的應(yīng)用。

當然,ArkTS以及ArkUI開發(fā)框架還很年輕,還有很多其它方面也會持續(xù)演進,比如UI自定義能力的進一步完善,語言運行時以及跨語言交互的進一步優(yōu)化,跨OS平臺能力的擴展,分布式開發(fā)范式等等。

四、ArkTS開發(fā)實踐

4.1 聲明式UI基本概念

應(yīng)用界面是由一個個頁面組成,ArkTS是由ArkUI框架提供,用于以聲明式開發(fā)范式開發(fā)界面的語言。聲明式UI構(gòu)建頁面的過程,其實是組合組件的過程,聲明式UI的思想,主要體現(xiàn)在兩個方面:

  • 描述UI的呈現(xiàn)結(jié)果,不需要關(guān)心過程;
  • 狀態(tài)驅(qū)動視圖更新;

類似蘋果的SwiftUI中通過組合視圖View,安卓Jetpack Compose中通過組合@Composable函數(shù),ArkUI作為HarmonyOS應(yīng)用開發(fā)的UI開發(fā)框架,其使用ArkTS語言構(gòu)建自定義組件,通過組合自定義組件完成頁面的構(gòu)建。

4.2 自定義組件

ArkTS通過struct聲明組件名,并通過@Component和@Entry裝飾器,來構(gòu)成一個自定義組件。并且,使用@Entry和@Component裝飾的自定義組件作為頁面的入口,會在頁面加載時首先進行渲染。比如:

@Entry
@Component
struct Index {
  ...
}

在自定義組件內(nèi)需要使用build方法來進行UI描述。

@Entry
@Component
 struct Index
   ...
   build() {
   ...
  } 
}

同時,build方法內(nèi)可以容納內(nèi)置組件和其他自定義組件,里面渲染的內(nèi)容就是最后頁面顯示的內(nèi)容。

4.3 配置屬性與布局

自定義組件通常使用的是基礎(chǔ)組件和容器組件等內(nèi)置組件進行的組合。但有時內(nèi)置組件的樣式并不能滿足我們的需求,ArkTS提供了屬性方法用于描述界面的樣式。屬性方法支持以下使用方式:

  • 常量傳遞:使用fontSize(50)來配置字體大小
Text('Hello World').fontSize(50)
  • 變量傳遞:在組件內(nèi)定義了相應(yīng)的變量后,可以使用this.變量的方式使用該變量
Text('Hello World').fontSize(this.size)
  • 鏈式調(diào)用:在配置多個屬性時,ArkTS提供了鏈式調(diào)用的方式,通過'.'方式連續(xù)配置
Text('Hello World').fontSize(this.size).width(100).height(100)
  • 內(nèi)置枚舉類型:ArkTS內(nèi)置了很多的枚舉類型,如Color,F(xiàn)ontWeight等。
Text('Hello World').fontColor(Color.Red).fontWeight(FontWeight.Bold)

4.4 狀態(tài)改變

實際開發(fā)中頁面的內(nèi)容并不是一層不變的,頁面的內(nèi)容可能需要產(chǎn)生變化,此時就需要用到狀態(tài)管理,類似于前端的setState。不過,ArkTS改變后會自動刷新。

聲明式UI的特點就是UI是隨數(shù)據(jù)更改而自動刷新的,我們這里定義了一個類型為boolean的變量isComplete,其被@State裝飾后,框架內(nèi)建立了數(shù)據(jù)和視圖之間的綁定,其值的改變影響UI的顯示。

@State isComplete : boolean = false;

@State裝飾器的作用如下圖。

4.5 循環(huán)渲染列表

當我們有多條待辦數(shù)據(jù)需要顯示在頁面時,就可以使用到ForEach循環(huán)渲染語法。例如,有下面一組數(shù)據(jù):

total_Tasks:Array< string > = [
  '早起晨練',
  '準備早餐',
  '閱讀名著',
  '學習ArkTS',
  '看劇放松'
]

下面是一段完整的代碼:

@Entry
@Component
struct ToDoList {
   ...
   build() {
     Row() {
       Column() {
         Text(...)
           ...
         ForEach(this.totalTasks,(item) = > {
           TodoItem({content:item})
         },...)
       }
       .width('100%')
     }
     .height('100%')
   }
 }

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)者
    +關(guān)注

    關(guān)注

    1

    文章

    647

    瀏覽量

    17543
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44063
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33089
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是ArkTS?

    ArkTS簡介 ArkTS是OpenHarmony優(yōu)選的應(yīng)用高級開發(fā)語言。ArkTS提供了聲明式UI范式、狀態(tài)管理支持等相應(yīng)的能力,讓開發(fā)
    發(fā)表于 06-17 06:24

    使用DevEcoStudio 開發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件

    # 使用DevEcoStudio 開發(fā)、編譯鴻蒙 NEXT_APP 以及使用中文插件 #鴻蒙開發(fā)工具 #DevEco Studio ## 1. 概述 DevEco Studio 是
    發(fā)表于 06-11 17:18

    DevEco Studio AI輔助開發(fā)工具兩大升級功能 鴻蒙應(yīng)用開發(fā)效率再提升

    HarmonyOS應(yīng)用的AI智能輔助開發(fā)助手——CodeGenie,該AI助手深度集成在DevEco Studio中,提供鴻蒙知識智能問答、鴻蒙Ar
    發(fā)表于 04-18 14:43

    開源啦?。?!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創(chuàng)

    的地方請大家高抬貴手,寬容一下,謝謝。 這次主要是給大家?guī)硪粋€重磅消息,就是我自己使用鴻蒙ArkTS語法開發(fā)的圖表組件今日正式開源了。為什么?原因有兩點吧! 鴻蒙是國產(chǎn)的操作系統(tǒng),
    發(fā)表于 03-15 15:21

    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)GPIO基礎(chǔ)知識

    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)GPIO基礎(chǔ)知識
    的頭像 發(fā)表于 03-06 11:23 ?621次閱讀
    【北京迅為】iTOP-RK3568OpenHarmony系統(tǒng)南向驅(qū)動<b class='flag-5'>開發(fā)</b>GPIO<b class='flag-5'>基礎(chǔ)知識</b>

    鴻蒙原生應(yīng)用開發(fā)也可以使用DeepSeek了

    ,打開對話框,選擇步驟4中我們在Custom: OpenAI中自定義的模型,也就是DeepSeek,然后與對話 輔助問答:與DeepSeek交流有關(guān)當前工程代碼的問題,提供鴻蒙相關(guān)ArkTS編程
    發(fā)表于 02-20 18:06

    #新年新氣象,大家新年快樂!#AIGC入門及鴻蒙入門

    ,參加知名的AIGC比賽也是提升技能和展示才華的好機會。鴻蒙系統(tǒng)作為華為推出的分布式操作系統(tǒng),具有廣泛的應(yīng)用前景和開發(fā)潛力。通過學習鴻蒙系統(tǒng)的基礎(chǔ)知識
    發(fā)表于 01-13 10:46

    AIGC入門及鴻蒙入門

    ,參加知名的AIGC比賽也是提升技能和展示才華的好機會。鴻蒙系統(tǒng)作為華為推出的分布式操作系統(tǒng),具有廣泛的應(yīng)用前景和開發(fā)潛力。通過學習鴻蒙系統(tǒng)的基礎(chǔ)知識
    發(fā)表于 01-13 10:32

    EMC基礎(chǔ)知識-華為

    EMC基礎(chǔ)知識-華為
    發(fā)表于 01-06 14:09 ?4次下載

    首款開發(fā)鴻蒙原生應(yīng)用的AI輔助編程工具正式上線了

    輔助編程工具——DevEco CodeGenie正式上線了,標志著鴻蒙原生應(yīng)用和元服務(wù)開發(fā)進入AI賦能的新時代。該工具支持開發(fā)鴻蒙原生應(yīng)用領(lǐng)域的智能
    的頭像 發(fā)表于 12-18 10:39 ?669次閱讀

    ArkTS開發(fā)指南優(yōu)化上新

    ArkTS是HarmonyOS應(yīng)用開發(fā)的官方高級語言,提供了聲明式UI范式、狀態(tài)管理、渲染控制等相應(yīng)能力,讓開發(fā)者能夠以更簡潔、更自然的方式開發(fā)應(yīng)用。
    的頭像 發(fā)表于 11-20 14:14 ?1548次閱讀
    <b class='flag-5'>ArkTS</b><b class='flag-5'>開發(fā)</b>指南優(yōu)化上新

    品質(zhì)管理基礎(chǔ)知識

    品質(zhì)管理基礎(chǔ)知識
    的頭像 發(fā)表于 11-01 11:08 ?666次閱讀
    品質(zhì)管理<b class='flag-5'>基礎(chǔ)知識</b>

    鴻蒙Flutter實戰(zhàn):06-使用ArkTs開發(fā)Flutter鴻蒙插件

    # 使用 ArkTs 開發(fā) Flutter 鴻蒙平臺插件 本文講述如何開發(fā)一個 Flutter 鴻蒙插件,如何實現(xiàn) Flutter 與
    發(fā)表于 10-22 21:56

    鴻蒙Flutter實戰(zhàn):05-使用第三方插件

    # 鴻蒙Flutter 實戰(zhàn):使用第三方插件 在鴻蒙Flutter開發(fā)中,如果涉及到使用原生功能,就要使用插件。使用插件有兩種方式,一種是自己編寫原生ArkTS代碼,在Dart側(cè)調(diào)用
    發(fā)表于 10-22 21:54

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡ArkTS相互操作(一)

    ArkTS 運行時接口,為用戶提供庫級別的 ArkTS 互操作能力。一、使用場景: 1.在 ArkTS 應(yīng)用開發(fā)倉頡模塊:把用戶倉頡代碼封裝成為
    發(fā)表于 07-31 17:43