ArkTS語言(一)
學習ArkTS語言
ArkTS是HarmonyOS的主要應用開發語言,在TypeScript基礎上進行了擴展,保留了其基本風格,并通過增強靜態檢查和分析來提高程序的穩定性和性能。本教程將幫助開發者掌握ArkTS的核心功能、語法及最佳實踐,以便高效地構建高性能移動應用。
1. 數據與類型
1.1 字面量
字面量(Literal)是一種直接表示在源代碼中的固定值,不同類型的字面量格式有所不同,下面是ArkTS中各類型字面量的表示方式。
● 數值型字面量
○ 整數:數學中的整數(例如:8, 15, 123)
○ 浮點數(浮點型):帶有小數點的數字(例如:8.15, 1.234)
● 字符串型字面量:用單引號或雙引號括起來的文本(例如:'abc', "你好世界")
● 布爾型字面量:表示真假(例如:true, false)
//1.整數型字面量
console.log('整數:',60); //60
//2.浮點型字面量
console.log('浮點數:',3.14) //3.14
console.log('浮點數:',.14) //0.14
console.log('浮點數:',1e2) //100
//3.布爾型字面量
console.log('布爾型:',true) //true
console.log('布爾型:',false) //false
//4.字符串型字面量
console.log('字符串:','Hello ArkTS') //Hello ArkTS
console.log('字符串:',"Hello HarmonyOS") //Hello HarmonyOS
1.2 變量
在計算機語言中,變量可以理解為存儲數據的容器。在ArkTS中定義變量的格式如下。
let 變量名: 類型 = 值
let a:number = 10 //ArkTS

定義各種類型的變量
let title: string = 'HUAWEI Mate 60 Pro'
console.log(title)
1.3 類型
ArkTS是一種靜態類型的語言,定義變量時必須明確數據類型。 ArkTS支持的數據類型有以下幾種。
string 類型
string 用于表示文本數據,可以包含字母、數字、符號和空格等。可以使用單引號(')、雙引號(")或反引號(`)來聲明字符串。反引號內可以嵌入表達式,形成模板字符串。
let name: string = 'ArkTS!';
let desc: string = "ArkTS是HarmonyOS的主要應用開發語言"
let templateStr: string = `Hello,${name}. ${desc}`
boolean 類型
boolean 用于表示邏輯上的真值和假值。只有兩個值:true 和 false。
let isDone: boolean = false;
array 類型
array即數組,它是一個存儲數據的容器,數組的長度由數組中元素的個數來確定。數組中第一個元素的索引為0。
// 0 1 2
let names: string[] = ['Alice', 'Bob', 'Carol'];
names[0] = "愛麗絲"
console.log(names[0]) //"愛麗絲"
enum類型
enum類型,又稱枚舉類型,是預先定義的一組命名值的值類型,其中命名值又稱為枚舉常量。
使用枚舉常量時必須以枚舉類型名稱為前綴。
enum ColorSet {
Red,
Green,
Blue
}
let c: ColorSet = ColorSet.Red;
常量表達式可以用于顯式設置枚舉常量的值。
enum Colors {
White = 0xFF,
Grey = 0x7F,
Black = 0x00
}
let c: ColorSet = ColorSet.Black;
union類型
union類型,即聯合類型,是由多個類型組合成的引用類型。聯合類型可以包含了變量可能的所有類型
let a1: string | number | ColorSet | string[] | ColorSet[] = "red" //正確
let a2: string | number | ColorSet | string[] | ColorSet[] = 0xff00 //正確
let a6: string | number | ColorSet | string[] | ColorSet[] = true //錯誤
Aliases類型
Aliases類型為別名類型,可以為已有類型提供替代名稱,或者為匿名類型(數組、函數、對象字面量或聯合類型)提供名稱。
// 為number類型取一個別名為int
type int = number
let a: number = 10
let b: int = 10
// 定義Type為聯合類型
type Type = string | number | ColorSet | string[] | ColorSet[]
let a7:Type = "黃色"
1.4 常量
常量是不會發生改變的數據,它只能被賦值一次。定義格式如下
const 常量名: 類型 = 值
例:在數學中有一個非常重要的常量,就是圓周率π
const PI: number = 3.1415926
PI = 31.4 //這是錯誤的,變量的值只能被賦值一次。
1.5 類型推斷
由于ArkTS是一種靜態類型語言,所有數據的類型都必須在編譯時確定。但是,如果一個變量或常量的聲明包含了初始值,那么開發者就不需要顯式指定其類型。
//以下兩種定義變量的方式都可以
let a1: number = 10
let a2 = "abc"
1.6 命名規范
不管定義變量還是定義常量,取名也是不是亂取的,是有一些命名規則的,必須遵守這些規則,否則代碼編譯不通過。
1. 只能包含數字、字母、下劃線、$,不能以數字開頭
2. 不能使用內置關鍵字或者保留字
3. 嚴格區分大小寫
1.7 undefined 空值
先說結論,undefined表示一個變量它的值為“空值”,意思就是這個變量沒有值,其它就是undefined。
有下面幾種情況,變量的值是undefined.
情況一:變量沒有顯示的賦值,其值默認就是undefined
變量沒有顯示的賦值,但是直接使用這個變量是不推薦的,所以編譯器會報錯。為了驗證上面的結論,我們可以使用強制斷言符號“!”,強制編譯通過。
let a: string
console.info(`${a}`) //編譯報錯
console.info(`${a!}`) //編譯通過,輸出undefined
let b: number
console.info(`${b!}`) //編譯通過,輸出undefined
情況二:變量沒有顯示賦值,但是明確聲明類型可以是undefined,其值默認也是undefined
let a: string | undefined
console.info(`${a}`) //編譯通過,輸出undefined
let b: number | undefined
console.info(`${b}`) //編譯通過,輸出undefined
情況三:變量顯示賦值為undefined,其類型必須聲明為undefined類型
let a: string = undefined //編譯錯誤
let b: string | undefined = undefined
console.info(`${a}`) //編譯通過,輸出undefined
注意:不管使用哪種形式定義變量,后續都可以按照指定類型更改變量的值
let a: string
let b: number | undefined
let c: boolean | undefined = undefined
console.info(`${a!}`) //輸出undefined
console.info(`${b}`) //輸出undefined
console.info(`${c}`) //輸出undefined
a = 'hello'
b = 20
c = true
console.info(`${a}`) //輸出hello
console.info(`${b}`) //輸出20
console.info(`${c}`) //輸出true
2. 運算符
運算符(Operator)是一種告訴編譯器執行特定數學或邏輯操作的符號。任何一門計算機語言運算操作基本上是一樣的。
2.1 算術運算符
所有算術運算符如下表所示

以上運算符都比較簡單,下面重點講解一下++或者--運算符的運算規則。
- 單獨使用:不斷++或者--放在操作數的前面還是后面,都表示對操作數自增1或者自減1
let a = 3
let b = 4
a++
console.log(`a的值為${a}`) // 4
++b;
console.log(`b的值為${b}`) // 5
- 混合使用:++和--可以放在變量前面或者后面,運算順序有所不同
let x = 3
let y = ++x //x先+1,再把x的結果賦值給y
console.log(`x的值為${x}`) //x的值為4
console.log(`y的值為${y}`) //y的值為4
let i = 3
let j = i++ //先把i的值賦值給j,i再+1
console.log(`i的值為${i}`) //x的值為4
console.log(`j的值為${j}`) //y的值為3
2.2 賦值運算符
賦值運算就是把具體數據值賦值給變量,有下面的幾個運算符

let a1 = 10 //把整數10賦值給var類型的變量a
let b1 = 20
b1+=10 //把b1+10之后,把結果再賦值給b,最終b=30
console.log(`b1的值為${b1}`) //b1的值為30
let c1 = 10
c1 %= 4 //把c對4取余數,把結果再賦值給c,最終c=2
console.log(`c1的值為${c1}`) //c1的值為2
2.3 比較運算符
用來對兩個數據做比較運算,最終結果只能是true或者false。需要注意的是==和=千萬不要搞混淆了
- = 用于賦值
- == 用于判斷兩個數據是否相等

let a2 = 10
let b2 = 10
let c2 = a2==b2
console.log(`c2的值為${c2}`) //c2的值為true
2.4 邏輯運算符
邏輯運算可以對多個條件進行連接,最終結果也是true或者false

let a3=3;
let b3=4;
let c3=5;
//&&(雙與): 左右兩邊都是true,結果才是true。
console.log('邏輯運算',a3>b3 && b3<c3) //false
console.log('邏輯運算',a3<b3 && b3<c3) //true
//||(雙或): 左右兩邊有一個是true,結果就是true。
console.log('邏輯運算',a3>b3 || b3>c3) //false
console.log('邏輯運算',a3<b3 || b3<c3) //true
//!(非): 對值取反
console.log('邏輯運算',!(a3<b3)) //false
3.流程語句
3.1 if語句
if語句用于需要根據邏輯條件執行不同語句的場景。當邏輯條件為真時,執行對應的一組語句,否則執行另一組語句(如果有的話)。
if語句如下所示:
if (condition1) {
// 語句1
} else if (condition2) {
// 語句2
} else {
// else語句
}
條件表達式可以是任何類型。但是對于boolean以外的類型,會進行隱式類型轉換:
let s1:string = "Hello"
if (s1) {
console.log(s1); // 打印“Hello”
}
let s2 = 'World';
if (s2.length != 0) {
console.log(s2); // 打印“World”
}
3.2 switch語句
switch用于在幾個固定的值當中,選擇一個匹配的值,執行對應的代碼塊。
switch (expression) {
case label1: // 如果label1匹配,則執行
// ...
// 語句1
// ...
break; // 可省略
case label2:
//語句2
break;
case label3: // 如果label2或label3匹配,則執行
// ...
// 語句23
// ...
break; // 可省略
default:
// 默認語句
}
如果switch表達式的值等于某個label的值,則執行相應的語句。
如果沒有任何一個label值與表達式值相匹配,并且switch具有default子句,那么程序會執行default子句對應的代碼塊。
break語句(可選的)允許跳出switch語句并繼續執行switch語句之后的語句。
如果沒有break語句,則執行switch中的下一個label對應的代碼塊。
3.3 三元表達式
條件表達式用于根據條件是true或者false,決定在兩個值中選擇一個值作為最終結果。
數據類型 變量名 = 條件表達式 ? 值1 : 值2;
- ● 執行流程:
a. 判斷關系表達式的結果是true還是false
b. 如果關系表達式是true,三元運算的結果就是表達式1
c. 如果關系表達式是false,三元運算的結果就是表達式2
//例1:求兩個變量的最大值
let n = 30;
let m = 20;
//三元運算的結果 被max接收
let max = n > m ? n : m
console.log('三元運算', max) //30
//例2:判斷成績是否及格
let score = 90
console.log('三元運算', score>=60?'及格':'不及格') //及格
3.4 for語句
for語句會被重復執行,直到循環退出語句值為false。for語句如下所示:
for (初始化語句; 條件判斷; 變量更新) {
循環體語句
}
示例:打印輸出1~10之間所有的整數
for(let i=1; i<=10; i++){
console.log(i)
}
示例:求0~10范圍內所有偶數的和
let sum = 0;
for (let i = 0; i <= 10; i+=2) {
sum+=i
}
3.5 for-of語句
使用for-of語句可遍歷數組或字符串。示例如下:
for (forVar of expression) {
statements
}
示例:
let array = ['你好', '鴻蒙', 'HarmonyOS'];
for (let s of array) {
console.log(s); //'你好', '鴻蒙', 'HarmonyOS'
}
3.6 while語句
只要condition為真值(轉換后為true的值),while語句就會執行statements語句。示例如下:
while (condition) {
statements
}
示例:
let n = 0;
let x = 0;
while (n < 3) {
x += n;
n++;
}
console.log(n)
3.7 do-while語句
如果condition的值為真值(轉換后為true的值),那么statements語句會重復執行。示例如下:
do {
statements
} while (condition)
示例:
let sum3 = 0
let i = 0;
do {
sum3 += i
i++
} while (i <= 10)
console.log(sum3) //55
3.8 break語句
使用break語句可以終止循環語句或switch。
示例:
for (let x = 1; x <=10; x++) {
if (x % 2 == 0) {
break
}
console.log(x) //1
}
如果break語句后帶有標識符,則將控制流轉移到該標識符所包含的語句塊之外。
示例:
let x = 1
label: while (true) {
switch (x) {
case 1:
// statements
break label; // 中斷while語句
}
}
3.9 continue語句
continue語句會停止當前循環迭代的執行,并繼續執行下一次循環。
示例:
for (let x = 1; x <=10; x++) {
if (x % 2 == 0) {
continue
}
console.log(x) //1 3 5 7 9
}
3.10 流程控制練習
//練習一:打印輸出1~100中既能被3整除,也能被5整除的數
//練習二:打印輸出所有的水仙花數(是一個三位數,每一位數字的立方和等于該數本身)
//比如:153 = 1*1*1 + 5*5*5 + 3*3*3
//練習三:接上練習二,求水仙花數有多少個?,把個數打印
//練習四:假設有一張足夠大的紙,請問折疊多少次可以到達珠穆朗瑪峰的高度
//練習五:打印4行5列的*矩形圖案
//*****
//*****
//*****
//*****
//練習六:打印4行5列的*直角三角形圖案
//*
//**
//***
//****
//*****
//練習七:打印9*9的99乘法表
//1*1=1
//1*2=2 2*2=4
//1*3=3 2*3=6 ...
//1*4=4 2*4=8 ...
//1*5=5 2*5=10 ...
//1*6=6 2*6=12 ...
//1*7=7 2*7=14 ...
//1*8=9 2*8=16 ...
//1*9=9 2*9=18 ... ... ... 9*9=81

浙公網安備 33010602011771號