一、簡介
ArkTS是一種設計用于構建高性能應用的編程語言。它在繼承TypeScript語法的基礎上進行了優(yōu)化,以提供更高的性能和開發(fā)效率。
環(huán)境配置如下所示:
API:18
SDK:OpenHarmony-v5.1.0-Release
代碼倉:https://gitee.com/Lockzhiner-Electronics/lingyu-rk3566-openharmony/tree/master/samples/C02_DataTypeAndVariableDeclaration
二、基礎知識
ArkTS通過聲明引入變量、常量、類型和函數(shù)。
2.1 變量聲明
使用關鍵字let聲明的變量可以在程序執(zhí)行期間具有不同的值。使用TS風格,聲明的時候使用冒號給出數(shù)據(jù)類型。
lethi:string='hello';
letnum:number=0;
2.2 常量聲明
使用關鍵字const聲明的常量為只讀類型,只能被賦值一次。
consthello:string='hello';
對常量重新賦值會造成編譯時錯誤。
2.3 自動類型推斷
如果變量或常量的聲明包含初始值,開發(fā)者無需顯式指定類型,因為ArkTS規(guī)范已列舉了所有允許自動推斷類型的場景。
以下示例中,兩條聲明語句都是有效的,兩個變量都是string類型:
lethi1:string='hello';
lethi2='hello, world';
2.4 數(shù)據(jù)類型
基本數(shù)據(jù)類型包括number、string等簡單類型,它們可以準確地表示單一的數(shù)據(jù)類型。對基本類型的存儲和訪問都是直接的,比較時直接比較其值。
引用類型包括對象、數(shù)組和函數(shù)等復雜數(shù)據(jù)結構。這些類型通過引用訪問數(shù)據(jù),對象和數(shù)組可以包含多個值或鍵值對,函數(shù)則可以封裝可執(zhí)行的代碼邏輯。引用類型在內(nèi)存中通過指針訪問數(shù)據(jù),修改引用會影響原始數(shù)據(jù)。
2.4.1 number類型
ArkTS提供number類型,任何整數(shù)和浮點數(shù)都可以被賦給此類型的變量。
數(shù)字字面量包括整數(shù)字面量和十進制浮點數(shù)字面量。
整數(shù)字面量包括以下類別:
十進制整數(shù),由數(shù)字序列組成。例如:0、117、-345。
十六進制整數(shù),以0x(或0X)開頭,包含數(shù)字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7。
八進制整數(shù),以0o(或0O)開頭,只能包含數(shù)字(0-7)。例如:0o777。
二進制整數(shù),以0b(或0B)開頭,只能包含數(shù)字0和1。例如:0b11、0b0011、-0b11。
浮點數(shù)字面量包括以下部分:
十進制整數(shù),可為有符號數(shù)(前綴為"+"或"-")。
小數(shù)點(".")。
小數(shù)部分(由十進制數(shù)字字符串表示)。
指數(shù)部分,以"e"或"E"開頭,后跟有符號(前綴為"+"或"-")或無符號整數(shù)。
示例:
letn1 =3.14;letn2 =3.141592;letn3 =.5;letn4 =1e2;functionfactorial(n:number):number{ if(n <=?1) {? ? return?1;? }? return?n *?factorial(n -?1);}factorial(n1) ?// ?7.660344000000002?factorial(n2) ?// ?7.680640444893748?factorial(n3) ?// ?1?factorial(n4) ?// ?9.33262154439441e+157?
number類型在表示大整數(shù)(即超過-9007199254740991~9007199254740991)時會造成精度丟失。在開發(fā)時可以按需使用bigint類型來確保精度:
letbigInt:BigInt=BigInt('999999999999999999999999999999999999999999999999999999999999');console.info('bigInt:'+ bigInt.toString());
2.4.2 boolean類型
boolean類型由true和false兩個邏輯值組成。
通常在條件語句中使用boolean類型的變量:
letisDone:boolean=false;// ...if(isDone) { console.info('Done!');}
2.4.3 string類型
string類型代表字符序列,可以使用轉(zhuǎn)義字符來表示字符。
字符串字面量由單引號(')或雙引號(")之間括起來的零個或多個字符組成。字符串字面量還有一特殊形式,是用反向單引號(``)括起來的模板字面量。
lets1 ='Hello, world!\n';lets2 ="this is a string";leta ='Success';lets3 =`The result is${a}`;
2.4.4 void類型
void類型用于指定函數(shù)沒有返回值。
此類型只有一個值,同樣是void。由于void是引用類型,因此它可以用于泛型類型參數(shù)。
classClass
2.4.5 Object類型
Object類型是所有引用類型的基類型。任何值,包括基本類型的值,都可以直接被賦給Object類型的變量(基本類型值會被自動裝箱)。Object類型用于表示除基本類型外的類型。
leto1:Object='Alice';leto2:Object= ['a','b'];leto3:Object=1;
2.4.6 array類型
array類型,即數(shù)組,是由可賦值給數(shù)組聲明中指定的元素類型的數(shù)據(jù)組成的對象。
數(shù)組可由數(shù)組復合字面量賦值。數(shù)組復合字面量是用方括號括起來的零個或多個表達式列表,每個表達式為數(shù)組中的一個元素。數(shù)組的長度由數(shù)組中元素的個數(shù)確定。數(shù)組中第一個元素的索引為0。
以下示例將創(chuàng)建包含三個元素的數(shù)組:
letnames:string[]=['Alice','Bob','Carol'];
2.4.7 enum類型
enum類型,即枚舉類型,是預先定義的一組命名值的值類型,其中命名值又稱為枚舉常量。
使用枚舉常量時必須以枚舉類型名稱為前綴。
enumColorSet { Red, Green, Blue }letc: ColorSet = ColorSet.Red;
常量表達式用于顯式設置枚舉常量的值。
enumColorSet { White =0xFF, Grey =0x7F, Black =0x00 }letc: ColorSet = ColorSet.Black;
2.4.8 Union類型
Union類型,即聯(lián)合類型,是由多個類型組合成的引用類型。聯(lián)合類型包含了變量可能的所有類型。使用type關鍵字進行定義。
classCat{ name: string ='cat'; //...}classDog{ name: string ='dog'; //...}classFrog{ name: string ='frog'; //...}type Animal = Cat | Dog | Frog | number | string | null | undefined;//Cat、Dog、Frog是一些類型(類或接口)let animal: Animal = new Cat();animal = new Frog();animal =42;animal ='dog';animal = undefined;
// 可以將類型為聯(lián)合類型的變量賦值為任何組成類型的有效值可以使用不同機制獲取聯(lián)合類型中的特定類型值。
示例:
classCat{sleep() {}; meow () {} }classDog{sleep() {}; bark () {} }classFrog{sleep() {}; leap () {} }type Animal = Cat | Dog | Frog;function foo(animal: Animal) { if(animal instanceof Frog) { animal.leap(); //animal在這里是Frog類型 } animal.sleep();//Animal具有sleep方法}
2.4.9 Aliases類型
Aliases類型為匿名類型(如數(shù)組、函數(shù)、對象字面量或聯(lián)合類型)提供名稱,或為已定義的類型提供替代名稱。
typeMatrix=number[][];typeHandler=(s:string,no:number) =>string;typePredicate =(x: T) =>boolean;typeNullableObject=Object|null;
三、代碼講解
下面是一個綜合案例,演示了上述大部分知識點的實際應用。
3.1 任務一:變量聲明與基本數(shù)據(jù)類型
這個任務將展示如何聲明和使用各種基本數(shù)據(jù)類型的變量和常量。
// ======== 任務一:變量聲明與基本數(shù)據(jù)類型 ========// 1. 使用 let 聲明可變變量,并進行類型注解letstudentName:string="張三";letage:number=20;letisEnrolled:boolean=true;// 2. 使用 const 聲明常量(不可修改)constMAX_STUDENTS:number=100;constCOURSE_NAME:string="HarmonyOS應用開發(fā)";// 3. 類型推斷 - 不顯式寫類型,讓編譯器自動推斷l(xiāng)etcity ="北京";// 推斷為 stringletscore =95.5; // 推斷為 numberletisActive =false;// 推斷為 boolean// 4. 特殊類型:undefined 和 nullletuninitializedVar:undefined=undefined;letemptyValue:null=null;// 5. 在控制臺輸出所有變量及其類型console.log("=== 基本數(shù)據(jù)類型練習 ===");// typeof 操作符可以獲取變量的類型console.log(`學生姓名:${studentName}, 類型:${typeofstudentName}`);console.log(`年齡:${age}, 類型:${typeofage}`);console.log(`是否注冊:${isEnrolled}, 類型:${typeofisEnrolled}`);console.log(`最大人數(shù)限制:${MAX_STUDENTS}, 類型:${typeofMAX_STUDENTS}`);console.log(`課程名稱:${COURSE_NAME}, 類型:${typeofCOURSE_NAME}`);console.log(`所在城市:${city}, 類型:${typeofcity}`);console.log(`分數(shù):${score}, 類型:${typeofscore}`);console.log(`是否活躍:${isActive}, 類型:${typeofisActive}`);console.log(`未初始化變量:${uninitializedVar}, 類型:${typeofuninitializedVar}`);console.log(`空值:${emptyValue}, 類型:${typeofemptyValue}`);// 嘗試修改常量的值 (取消注釋下面一行會報錯)// MAX_STUDENTS = 120;
3.2 任務二:數(shù)組與對象
這個任務將展示如何使用數(shù)組(Array)和對象(Object)來組織和管理更復雜的數(shù)據(jù)。我們還會引入 interface 來定義自定義的數(shù)據(jù)結構。
// ======== 任務二:數(shù)組與對象 ========// 1. 數(shù)組聲明 - 使用類型注解// 字符串數(shù)組letfavoriteSubjects:string[] = ["數(shù)學","物理","信息技術"];// 數(shù)字數(shù)組lettestScores:number[] = [88,92,76,95];// 2. 對象聲明 - 定義學生信息// 使用 interface 定義一個自定義類型,增強代碼可讀性和類型檢查interfaceContact{ phone:string; email:string;}// 定義一個更復雜的 StudentInfo 類型interfaceStudentInfo{ id:number; name:string; age:number; grades:number[]; // grades 屬性是一個數(shù)字數(shù)組 hobbies:string[]; // hobbies 屬性是一個字符串數(shù)組 contact?:Contact; // contact 是一個可選屬性,使用 ? 標記}// 根據(jù) interface 創(chuàng)建一個學生對象letstudent1:StudentInfo= { id:1001, name:"王五", age:19, grades: [85,90,88], hobbies: ["編程","籃球","音樂"] // contact 屬性可以暫時不提供};// 3. 訪問和修改對象屬性student1.age=20;// 修改年齡student1.hobbies.push("繪畫");// 向 hobbies 數(shù)組添加一個新元素// 4. 給對象添加可選的聯(lián)系信息student1.contact= { phone:"13800138000", email:"wangwu@example.com"};// 5. 數(shù)組方法練習testScores.push(89);// 向 testScores 數(shù)組添加一個新成績// 使用擴展運算符 (...) 和 Math.max 函數(shù)找出最高分lethighestScore =Math.max(...testScores);// 6. 輸出復雜類型數(shù)據(jù)console.log("\n=== 數(shù)組與對象練習 ===");console.log("最喜歡的科目:", favoriteSubjects);console.log("測試成績:", testScores);console.log("最高分:", highestScore);console.log("學生信息:");console.log(`ID:${student1.id}`);console.log(`姓名:${student1.name}`);console.log(`年齡:${student1.age}`);// 使用數(shù)組的 join 方法將數(shù)組轉(zhuǎn)為字符串console.log(`成績:${student1.grades.join(", ")}`);console.log(`愛好:${student1.hobbies.join(", ")}`);// 安全地訪問可選屬性if(student1.contact) { console.log(`電話:${student1.contact.phone}`); console.log(`郵箱:${student1.contact.email}`);}else{ console.log("聯(lián)系方式: 未提供");}
3.3 UI 展示組件
最后,我們將所有定義的數(shù)據(jù)在 UI 界面上展示出來。
@Entry@ComponentstructMainPage{ build() { // 使用 Scroll 組件允許在內(nèi)容超出屏幕時滾動 Scroll() { // Column 組件將子元素垂直排列 Column({space:10}) { // --- 顯示基本類型信息 --- Text('=== 基本數(shù)據(jù)類型演示 ===') .fontSize(20) .fontWeight(FontWeight.Bold) Text(`學生姓名:${studentName}`) Text(`年齡:${age}`) // 使用三元運算符將布爾值轉(zhuǎn)為易讀的文本 Text(`是否注冊:${isEnrolled ?'是':'否'}`) Text(`課程名稱:${COURSE_NAME}`) Text(`所在城市:${city}`) Text(`分數(shù):${score}`) Text(`是否活躍:${isActive ?'是':'否'}`) Text(`最大人數(shù)限制:${MAX_STUDENTS}`) // --- 顯示復雜類型信息 --- Text('\n=== 數(shù)組與對象演示 ===') .fontSize(20) .fontWeight(FontWeight.Bold) Text(`最喜歡科目:${favoriteSubjects.join(', ')}`) Text(`測試成績:${testScores.join(', ')}`) Text(`最高分:${highestScore}`) Text('\n--- 學生信息 ---') Text(`ID:${student1.id}`) Text(`姓名:${student1.name}`) Text(`年齡:${student1.age}`) Text(`成績:${student1.grades.join(', ')}`) Text(`愛好:${student1.hobbies.join(', ')}`) // 同樣,在UI中安全地訪問可選屬性 if(student1.contact) { Text(`電話:${student1.contact.phone}`) Text(`郵箱:${student1.contact.email}`) }else{ Text("聯(lián)系方式: 未提供") } // 添加一個空白組件,將內(nèi)容與底部拉開距離 Blank() } // 設置 Column 的寬度為父容器的 90% .width('90%') // 設置內(nèi)邊距 .padding(10) } }}
四、運行結果
注:在開始本項目前,請參照DevEco Studio開發(fā)環(huán)境搭建完成環(huán)境搭建。
完成項目編譯后,在entry目錄下會出現(xiàn)build文件夾,參照下圖步驟將應用安裝到設備或模擬器:


結果

-
編程語言
+關注
關注
10文章
1964瀏覽量
39558 -
變量
+關注
關注
0文章
616瀏覽量
29505 -
OpenHarmony
+關注
關注
33文章
3952瀏覽量
21095
發(fā)布評論請先 登錄
技術干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量
基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony
基于凌羽派的OpenHarmony北向應用開發(fā):Hello World 示例應用
基于凌羽派的OpenHarmony北向應用開發(fā):ArkTS語法-數(shù)據(jù)類型和變量聲明
Verilog 變量聲明與數(shù)據(jù)類型二
Verilog 變量聲明與數(shù)據(jù)類型一
HarmonyOS/OpenHarmony應用開發(fā)-ArkTS的聲明式開發(fā)范式
HarmonyOS/OpenHarmony應用開發(fā)-ArkTS語言基本語法說明
重視變量的數(shù)據(jù)類型
ARRAY 數(shù)據(jù)類型的變量
C語言數(shù)據(jù)類型有哪些
基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony
基于凌羽派的OpenHarmony北向應用開發(fā):Hello World 示例應用
基于凌羽派的OpenHarmony北向應用開發(fā):ArkTS語法-數(shù)據(jù)類型和變量聲明
評論