chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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框架,擴(kuò)展了聲明式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 的一個超集,它擴(kuò)展了 JavaScript 的語法,通過在JavaScript的基礎(chǔ)上添加靜態(tài)類型定義構(gòu)建而成,是一個開源的編程語言。
  • ArkTS兼容TypeScript語言,拓展了聲明式UI、狀態(tài)管理、并發(fā)任務(wù)等能力,可以認(rèn)為是TypeScript的超集。
    由此可知,TypeScript是JavaScript的超集,ArkTS則是TypeScript的超集,他們的關(guān)系如下圖所示。

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

二、ArkTS誕生背景

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

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

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

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

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

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

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

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


可以看到,基于TS擴(kuò)展的聲明式UI范式中所用的語言就是ArkTS。下面結(jié)合一個具體示例,從應(yīng)用開發(fā)視角簡單介紹下基于ArkTS的全新聲明式開發(fā)范式。例如,下面代碼就是ArkTS聲明式開發(fā)范式(有點(diǎn)類似于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 變更。
  • 自定義組件
    可復(fù)用的 UI 單元,可組合其它組件,如上述被 @Component 裝飾的 struct Hello。
  • UI 描述
    聲明式的方式來描述 UI 的結(jié)構(gòu),如上述 build() 方法內(nèi)部的代碼塊。
  • 內(nèi)置組件
    框架中默認(rèn)內(nèi)置的基礎(chǔ)和布局組件,可直接被開發(fā)者調(diào)用,比如示例中的 Column、Text、Divider、Button。
  • 事件方法
    用于添加組件對事件的響應(yīng)邏輯,統(tǒng)一通過事件方法進(jìn)行設(shè)置,如跟隨在Button后面的onClick()。
  • 屬性方法

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

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

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

接下來,ArkUI會從以下兩個方面進(jìn)行一些改進(jìn):

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

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

3.2 更靈活的并行化處理

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

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

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

四、ArkTS開發(fā)實(shí)踐

4.1 聲明式UI基本概念

應(yīng)用界面是由一個個頁面組成,ArkTS是由ArkUI框架提供,用于以聲明式開發(fā)范式開發(fā)界面的語言。聲明式UI構(gòu)建頁面的過程,其實(shí)是組合組件的過程,聲明式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裝飾的自定義組件作為頁面的入口,會在頁面加載時首先進(jìn)行渲染。比如:

@Entry
@Component
struct Index {
  ...
}

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

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

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

4.3 配置屬性與布局

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

  • 常量傳遞:使用fontSize(50)來配置字體大小
Text('Hello World').fontSize(50)
  • 變量傳遞:在組件內(nèi)定義了相應(yīng)的變量后,可以使用this.變量的方式使用該變量
Text('Hello World').fontSize(this.size)
  • 鏈?zhǔn)秸{(diào)用:在配置多個屬性時,ArkTS提供了鏈?zhǔn)秸{(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)改變

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

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

@State isComplete : boolean = false;

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

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

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

total_Tasks:Array< string > = [
  '早起晨練',
  '準(zhǔn)備早餐',
  '閱讀名著',
  '學(xué)習(xí)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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 開發(fā)者
    +關(guān)注

    關(guān)注

    1

    文章

    779

    瀏覽量

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

    關(guān)注

    60

    文章

    3012

    瀏覽量

    46159
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2156

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    開發(fā)知識庫測試添加知識

    文檔類型的知識要等待數(shù)據(jù)校驗(yàn)完成后才能上架 可以點(diǎn)擊知識名稱查看知識詳情 等待后端處理完成可以點(diǎn)擊知識列表的上架 在智能體中知識庫的位置點(diǎn)
    發(fā)表于 03-06 15:07

    鴻蒙智能體開發(fā)知識庫---創(chuàng)建知識

    源信息,可以選擇對圖片智能標(biāo)注; 3.導(dǎo)入方式-數(shù)據(jù)源:配置接口的形式導(dǎo)入知識數(shù)據(jù),按提示填寫相關(guān)信息; 4.導(dǎo)入方式-爬蟲:填寫爬取地址,配置爬取周期自動爬取所需的知識數(shù)據(jù)。 本文參考鴻蒙官方文檔
    發(fā)表于 03-06 10:18

    基于凌羽派的OpenHarmony北向應(yīng)用開發(fā)ArkTS語法-數(shù)據(jù)類型和變量聲明

    一、簡介ArkTS是一種設(shè)計(jì)用于構(gòu)建高性能應(yīng)用的編程語言。它在繼承TypeScript語法的基礎(chǔ)上進(jìn)行了優(yōu)化,以提供更高的性能和開發(fā)效率。環(huán)境配置如下所示:API:18SDK:OpenHarmony-v5.1.0-Release
    的頭像 發(fā)表于 02-26 13:55 ?369次閱讀
    基于凌羽派的OpenHarmony北向應(yīng)用<b class='flag-5'>開發(fā)</b>:<b class='flag-5'>ArkTS</b>語法-數(shù)據(jù)類型和變量聲明

    阻燃系列基礎(chǔ)知識

    我很榮幸有機(jī)會在這里與大家分享我對阻燃系列基礎(chǔ)知識的研究。今天,我們將探討的主題是“阻燃系列基礎(chǔ)知識”。在我們?nèi)粘I钪?,火?zāi)事故頻發(fā),造成巨大的財(cái)產(chǎn)損失和人員傷亡。因此,了解阻燃材料的基礎(chǔ)知識對于
    的頭像 發(fā)表于 02-06 08:07 ?551次閱讀
    阻燃系列<b class='flag-5'>基礎(chǔ)知識</b>

    無刷電機(jī)驅(qū)動器的基礎(chǔ)知識

    本文將從技術(shù)角度出發(fā),對三相無刷電機(jī)的電機(jī)驅(qū)動器的作用、種類和規(guī)格進(jìn)行介紹。通過本文,您可以學(xué)習(xí)到電機(jī)驅(qū)動器選型所需的基礎(chǔ)知識。
    的頭像 發(fā)表于 12-10 14:13 ?6873次閱讀
    無刷電機(jī)驅(qū)動器的<b class='flag-5'>基礎(chǔ)知識</b>

    如何申請鴻蒙開發(fā)板?想體驗(yàn)鴻蒙生態(tài)。

    如何申請鴻蒙開發(fā)板?想體驗(yàn)鴻蒙生態(tài)。
    發(fā)表于 11-29 08:34

    RK?平臺?Vendor Storage?開發(fā)指南:基礎(chǔ)知識、流程與實(shí)用技巧

    備可靠性校驗(yàn)、掉電恢復(fù)等關(guān)鍵特性,是保障設(shè)備身份標(biāo)識、功能授權(quán)等核心信息安全的重要組件。本文將從基礎(chǔ)知識開發(fā)流程、使用途徑三方面,為開發(fā)者梳理完整的開發(fā)邏輯。 一、核心
    的頭像 發(fā)表于 11-22 07:11 ?1112次閱讀
    RK?平臺?Vendor Storage?<b class='flag-5'>開發(fā)</b>指南:<b class='flag-5'>基礎(chǔ)知識</b>、流程與實(shí)用技巧

    視覺工程師必須知道的工業(yè)相機(jī)基礎(chǔ)知識

    工業(yè)相機(jī)基礎(chǔ)知識概述。
    的頭像 發(fā)表于 09-19 17:04 ?1667次閱讀
    視覺工程師必須知道的工業(yè)相機(jī)<b class='flag-5'>基礎(chǔ)知識</b>

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)#
    的頭像 發(fā)表于 07-11 18:20 ?1109次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b>組件實(shí)踐

    【 HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    【 HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言:移動
    的頭像 發(fā)表于 07-07 11:57 ?1185次閱讀
    【 HarmonyOS 5 入門系列 】<b class='flag-5'>鴻蒙</b>HarmonyOS示例項(xiàng)目講解

    DevEco CodeGenie 鴻蒙AI 輔助編程初次使用

    一、工具概述與核心能力 DevEco CodeGenie 是集成在 DevEco Studio 中的 AI 輔助編程插件,專為 HarmonyOS 應(yīng)用開發(fā)設(shè)計(jì),提供三大核心能力: 智能知識問答
    的頭像 發(fā)表于 06-26 08:48 ?1056次閱讀

    什么是ArkTS?

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

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    ?** 鴻蒙并發(fā)編程實(shí)戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實(shí)戰(zhàn)場景解決方案 !從金融理財(cái)?shù)接螒?/div>
    發(fā)表于 06-12 16:19

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

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

    KaihongOS操作系統(tǒng):ArkTS語言基礎(chǔ)

    應(yīng)用開發(fā)中使用的TypeScript超集,提供了一套豐富的API來構(gòu)建應(yīng)用界面和邏輯。 ArkTS與TypeScript ArkTS基于TypeScript進(jìn)行擴(kuò)展,因此TypeScript的大部分語法
    發(fā)表于 04-23 06:31