本文旨在深入探討華為鴻蒙HarmonyOS Next系統(截止目前API12)的技術細節,基於實際開發實踐進行總結。主要作為技術分享與交流載體,難免錯漏,歡迎各位同仁提出寶貴意見和問題,以便共同進步。本文為原創內容,任何形式的轉載必須註明出處及原作者。
ArkTS 提供了一套容器集,包括 Array、Map、Set 等型別,用於儲存和管理資料。ArkTS 容器與 JavaScript 原生容器在行為上存在一些差異,需要開發者注意。
ArkTS 的 Array、Map、Set 等容器型別
- Array:ArkTS 的 Array 型別與 JavaScript 的 Array 型別類似,但有一些差異,例如不允許在遍歷、訪問過程中進行元素的增刪改操作。
- Map:ArkTS 的 Map 型別與 JavaScript 的 Map 型別類似,但有一些差異,例如建構函式中必須提供一個初始值的建構函式,且不支援使用計算屬性名稱。
- Set:ArkTS 的 Set 型別與 JavaScript 的 Set 型別類似,但有一些差異,例如不允許在遍歷、訪問過程中進行元素的增刪改操作,且 Sendable 類和介面中不允許使用計算屬性名稱。
原生 API 與 ArkTS API 的差異點
原生 API | ArkTS API |
---|---|
Array.from | collections.Array.from |
Array.slice | collections.Array.slice |
Map.entries | collections.Map.entries |
Map.keys | collections.Map.keys |
Map.values | collections.Map.values |
Set.add | collections.Set.add |
Set.delete | collections.Set.delete |
Set.has | collections.Set.has |
ArkTS 容器在併發中的應用
ArkTS 容器可以安全地在併發例項間傳遞,避免了資料競爭問題。但是,ArkTS 容器並不是執行緒安全的,內部使用了 fail-fast 機制。因此,在併發環境中使用 ArkTS 容器時,需要使用非同步鎖機制保證容器的安全訪問。
ArkTS 容器的建立與操作例項
以下是一個簡單的示例,演示如何建立和操作 ArkTS 容器:
import { collections } from '@kit.ArkTS';
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(async () => {
// 建立 Array
const arr = new collections.Array<number>();
arr.push(1);
arr.push(2);
arr.push(3);
console.log(arr); // 輸出: [1, 2, 3]
// 建立 Map
const map = new collections.Map<number, string>();
map.set(1, 'one');
map.set(2, 'two');
map.set(3, 'three');
console.log(map); // 輸出: {1: "one", 2: "two", 3: "three"}
// 建立 Set
const set = new collections.Set<string>();
set.add('one');
set.add('two');
set.add('three');
console.log(set); // 輸出: Set { "one", "two", "three" }
})
.width('100%');
}
.height('100%');
}
}
這段程式碼定義了一個名為 Index
的元件,並在元件中顯示了一條文字訊息 "Hello World"。點選按鈕會建立 Array、Map 和 Set 容器,並輸出容器的內容。
ArkTS 容器與原生 API 對比表
原生 API | ArkTS API | 差異點 |
---|---|---|
Array.length | collections.Array.length | 不允許設定 length |
Array.pop | collections.Array.pop | 不允許在遍歷、訪問過程中進行元素的操作 |
Array.push | collections.Array.push | 不允許在遍歷、訪問過程中進行元素的操作 |
Array.concat | collections.Array.concat | 不允許在遍歷、訪問過程中進行元素的操作 |
Map.new | collections.Map.create | 必須提供初始值 |
Map.entries | collections.Map.entries | 不支援 thisArg |
Map.keys | collections.Map.keys | 不支援 thisArg |
Map.values | collections.Map.values | 不支援 thisArg |
Set.add | collections.Set.add | 不允許在遍歷、訪問過程中進行元素的操作 |
Set.delete | collections.Set.delete | 不允許在遍歷、訪問過程中進行元素的操作 |
Set.has | collections.Set.has | 不支援 thisArg |
總結
透過以上介紹,您可以瞭解到鴻蒙系統中 ArkTS 容器與原生容器的差異,以及 ArkTS 容器在併發中的應用。希望本文能夠幫助您掌握鴻蒙系統中的併發程式設計技術,並開發出更優秀的鴻蒙應用。