目錄
什么是ArkTS?
ArkTS的發展趨勢
ArkTS的定位及約束
ArkTS的對UI的拓展
1、UI描述
2、狀態管理:
ArkTS語法基礎
基本知識:聲明
基本知識:類型
基本知識:空安全
基本知識:類型安全與類型推斷
基本知識:語句
函數的聲明和使用
類的聲明和使用
模塊的導入與導出
ArkTS對UI的語法支持
自定義組件的規則
組件描述的規則
組件描述
屬性方法
事件方法
布局描述
渲染控制語法
if/else if/else
Foreach?編輯
LazyForeach
什么是ArkTS?
ArkTS是鴻蒙生態的應用開發語言,它提供了聲明式UI范式、狀態管理支持等相應的能力,讓開發者可以以更簡潔、更自然的方式開發應用。
同時,它在保持TypeScript(簡稱TS)基本語法風格的基礎上,進一步通過規范強化靜態檢查和分析,使得在程序運行之前的開發期能檢測更多錯誤,提升代碼正確性;并實現更好的運行性能。
ArkTS的發展趨勢
ArkTS的定位及約束
- ArkTS作為OH/HMOS官方主流推薦開發語言
- ets以及.d.ets作為ArkTS語言源碼后綴
- 與TS/JS高效互操作,兼容TS/JS生態
- ets文件可以import ets/ts/js文件源碼,但是ts/js文件不允許import ets文件源碼
- 新增SDK API(不包括NDK部分)接口需要符合ArkTS規范
左側TypeScript代碼片段演示了如何在運行時通過添加和刪除某些屬性來更改對象的布局。運行時支持此類特性需要大量的性能開銷,ArkTS禁止使用any類型、禁止在運行時更改對象的布局。可以使用可選屬性和給該屬性賦值undefined的方式來替代對對象布局的動態改變。
此TypeScript代碼段展示了過于靈活的特性導致行為的二義性。在class C中存在實例方法m,它應被C的所有實例所共享,也就是說C的實例調用m方法時行為應一致。在TypeScript中,可以使用對象字面的方式創建C的實例,跳過這樣的約束,構造一個不符合C預期但類型是C的實例,這是不安全的行為,也會對使用者造成困惑。
ArkTS禁止使用對象字面量初始化具有方法的類,請使用new操作符創建類的實例或者將類中方法改為類的實例屬性(類型為方法)。
ArkTS的對UI的拓展
1、UI描述
在TS的類型系統的基礎上,做了進一步的擴展:定義了各種裝飾器、自定義組件和UI描述機制,再配合UI開發框架中的UI內置組件、事件方法、屬性方法等共同構成了應用開發的主體。
2、狀態管理:
ArkTS在TS的類型系統的基礎上,做了進一步的擴展:定義了各種裝飾器、自定義組件和UI描述機制,再配合UI開發框架中的UI內置組件、事件方法、屬性方法等共同構成了應用開發的主體。ArkTS的對UI的拓展UI 相關聯的數據,不僅可以在組件內使用,還可以在不同組件層級間傳遞,比如父子組件之間,爺孫組件之間,也可以是全局范圍內的傳遞,還可以是跨設備傳遞。
ArkTS語法基礎
基本知識:聲明
基本知識:類型
基本類型:string、number、boolean、Enum
引用類型:Array、基于Object的自定義類
聯合類型:Union
類型別名:Aliases
// 基本類型:string、number、boolean、Enum
let name: string = '小明’;
let age: number = 20;
let isMale: boolean = true;console.log(name); // 輸出小明
console.log(age.toString());// 輸出:20
console.log(`我的名字叫${name},今年${age}歲`);enum Color {Red,Blue,Green
}let favouriteColor: Color = Color.Red;// 引用類型:Array、基類Object
let students: string[] = ['小明', '小張', '小王', '小李’];
let students: Array<string>= ['小明', '小張', '小王', '小李’];// 聯合類型:Union
let luckyNum: number | string = 7;
luckyNum= ’seven';// 類型別名:Aliasestype Matrix= number[][];
type NullableObject= Object | null;
基本知識:空安全
一般來說,有時會存在聲明變量類型而不明確提供初始值。在這類情況下,通常使用聯合類型包含null值
1、使用該變量中需要進行判空
let name: string | null = null
console.log(name.length.toString()); //Error Message:Cannot read property length of null
2、使用空值合并表達式,??左邊的值為null時會返回表達式右邊的值
let name: string | null = null
const res = name ?? '';
3、使用?進行可選鏈,如果是null,運算符會返回undefined
let str:string | null = 'aa';
let len = str?.length;
基本知識:類型安全與類型推斷
基本知識:語句
// 條件語句
let isValid: boolean;
if (Math.random() > 0.5) {isValid = true;
} else {isValid = false;
}// 條件表達式
let isValid = Math.random() > 0.5 ? true : false;// 循環語句 用于重復執行相同的一組語句,提高效率、簡化代碼循環語句
// for
for (let i = 0; i < students.length; i++) {console.log(students[i]);
}// for...of
for (let student of students) {console.log(student);
}// while
let index = 0;
while (index < students.length) {console.log(students[index]);index++;
}
函數的聲明和使用
類的聲明和使用
模塊的導入與導出
通過import導入另一個文件的變量、函數、類等
// Page.ets
import { Person } from './Person';
const person = new Person('小張', 20, true);
person.introduce();//輸出:小張是個男生,年齡是28歲
ArkTS對UI的語法支持
自定義組件的規則

組件描述的規則
組件描述
屬性方法
事件方法
布局描述

渲染控制語法
if/else if/else

Foreach
LazyForeach
