一僚匆、引言
ArkTS在保持TypeScript(TS)基本語法風(fēng)格的基礎(chǔ)上融欧,通過規(guī)范強(qiáng)化靜態(tài)檢查和分析诫舅,在程序開發(fā)期檢測更多錯誤笛辟,提升程序穩(wěn)定性與運行性能。本文將闡述為何建議將TS代碼適配為ArkTS代碼序苏。
二手幢、程序穩(wěn)定性
(一)動態(tài)類型語言的問題
以JavaScript(JS)為代表的動態(tài)類型語言,雖能讓開發(fā)者快速編寫代碼忱详,但容易在運行時產(chǎn)生非預(yù)期錯誤围来。如未檢查值是否為undefined
,可能導(dǎo)致程序崩潰匈睁。
(二)TypeScript的局限性
TS通過標(biāo)注類型檢查錯誤监透,多數(shù)錯誤在編譯時可被檢測,但不強(qiáng)制變量類型標(biāo)注航唆,限制了編譯時檢查胀蛮。
(三)ArkTS的改進(jìn)
ArkTS強(qiáng)制使用靜態(tài)類型,要求類的屬性在聲明或構(gòu)造函數(shù)中顯式初始化糯钙,減少運行時錯誤粪狼。例如:
- TS非嚴(yán)格模式下的類定義(存在問題)
class Person {
name: string; // undefined
setName(n: string): void {
this.name = n;
}
getName(): string {
return this.name;
}
}
let buddy = new Person();
buddy.getName().length; // 運行時異常: name is undefined
- ArkTS改進(jìn)后的類定義(更安全)
class Person {
name: string = '';
setName(n: string): void {
this.name = n;
}
getName(): string {
return this.name;
}
}
let buddy = new Person();
buddy.getName().length; // 0, 沒有運行時異常
三、程序性能
(一)動態(tài)類型語言的運行時檢查
動態(tài)類型語言為保證正確性超营,在運行時檢查對象類型鸳玩,如JS訪問undefined
屬性時會檢查類型,這雖可優(yōu)化但仍影響性能演闭。TS編譯成JS后也有同樣問題不跟。
(二)ArkTS的解決方案
ArkTS使能靜態(tài)類型檢查,編譯成方舟字節(jié)碼文件而非JS代碼米碰,運行速度更快且更易優(yōu)化窝革。
(三)Null Safety特性
- 示例函數(shù)及問題
function notify(who: string, what: string) {
console.log(`Dear ${who}, a message for you: ${what}`);
}
notify('Jack', 'You look great today');
notify(null, undefined); // 程序仍運行,但引擎做了額外類型檢查
-
ArkTS的嚴(yán)格檢查
ArkTS強(qiáng)制嚴(yán)格null
檢查吕座,保證null
不是合法string
類型變量的值虐译,不符合類型的代碼無法編譯,有助于優(yōu)化性能吴趴。如上述notify(null, undefined)
在ArkTS中會編譯報錯漆诽。
四、.ets代碼兼容性
(一)語法規(guī)則變化
API version 10之前锣枝,ArkTS(.ets文件)采用標(biāo)準(zhǔn)TS語法厢拭。從API version 10 Release起,ArkTS語法規(guī)則明確定義撇叁,SDK增加編譯時語法檢查供鸠。
(二)編譯策略
- 標(biāo)準(zhǔn)模式(compatibleSdkVersion >= 10):違反ArkTS語法規(guī)則的.ets文件代碼會導(dǎo)致工程編譯失敗,需完全適配陨闹。
- 兼容模式(compatibleSdkVersion < 10):以warning提示違反規(guī)則代碼楞捂,工程可編譯成功薄坏,但需適配才能在標(biāo)準(zhǔn)模式下編譯。
五寨闹、方舟運行時與TS/JS的關(guān)系
(一)應(yīng)用環(huán)境限制
- 強(qiáng)制使用嚴(yán)格模式(
use strict
)胶坠。 - 禁止使用
eval()
。 - 禁止使用
with() {}
鼻忠。 - 禁止以字符串為代碼創(chuàng)建函數(shù)涵但。
(二)語法差異
標(biāo)準(zhǔn)TS/JS中JSON數(shù)字格式要求小數(shù)點后必須有數(shù)字,方舟運行時允許2.e3
這類科學(xué)計數(shù)法帖蔓。
綜上所述矮瘟,ArkTS在多方面的改進(jìn)和特性使其相比TS更具優(yōu)勢,在鴻蒙Next開發(fā)中進(jìn)行ArkTS語法適配有助于提升程序質(zhì)量和開發(fā)效率塑娇。