鸿蒙Next ArkTS语法适配背景概述

news/2024/12/23 9:12:51/文章来源:https://www.cnblogs.com/freerain/p/18623040

一、引言

ArkTS在保持TypeScript(TS)基本语法风格的基础上,通过规范强化静态检查和分析,在程序开发期检测更多错误,提升程序稳定性与运行性能。本文将阐述为何建议将TS代码适配为ArkTS代码。

二、程序稳定性

(一)动态类型语言的问题

以JavaScript(JS)为代表的动态类型语言,虽能让开发者快速编写代码,但容易在运行时产生非预期错误。如未检查值是否为undefined,可能导致程序崩溃。

(二)TypeScript的局限性

TS通过标注类型检查错误,多数错误在编译时可被检测,但不强制变量类型标注,限制了编译时检查。

(三)ArkTS的改进

ArkTS强制使用静态类型,要求类的属性在声明或构造函数中显式初始化,减少运行时错误。例如:

  1. TS非严格模式下的类定义(存在问题)
class Person {name: string; // undefinedsetName(n: string): void {this.name = n;}getName(): string {return this.name;}
}
let buddy = new Person();
buddy.getName().length; // 运行时异常: name is undefined
  1. ArkTS改进后的类定义(更安全)
class Person {name: string = '';setName(n: string): void {this.name = n;}getName(): string {return this.name;}
}
let buddy = new Person();
buddy.getName().length; // 0, 没有运行时异常

三、程序性能

(一)动态类型语言的运行时检查

动态类型语言为保证正确性,在运行时检查对象类型,如JS访问undefined属性时会检查类型,这虽可优化但仍影响性能。TS编译成JS后也有同样问题。

(二)ArkTS的解决方案

ArkTS使能静态类型检查,编译成方舟字节码文件而非JS代码,运行速度更快且更易优化。

(三)Null Safety特性

  1. 示例函数及问题
function notify(who: string, what: string) {console.log(`Dear ${who}, a message for you: ${what}`);
}
notify('Jack', 'You look great today');
notify(null, undefined); // 程序仍运行,但引擎做了额外类型检查
  1. ArkTS的严格检查
    ArkTS强制严格null检查,保证null不是合法string类型变量的值,不符合类型的代码无法编译,有助于优化性能。如上述notify(null, undefined)在ArkTS中会编译报错。

四、.ets代码兼容性

(一)语法规则变化

API version 10之前,ArkTS(.ets文件)采用标准TS语法。从API version 10 Release起,ArkTS语法规则明确定义,SDK增加编译时语法检查。

(二)编译策略

  1. 标准模式(compatibleSdkVersion >= 10):违反ArkTS语法规则的.ets文件代码会导致工程编译失败,需完全适配。
  2. 兼容模式(compatibleSdkVersion < 10):以warning提示违反规则代码,工程可编译成功,但需适配才能在标准模式下编译。

五、方舟运行时与TS/JS的关系

(一)应用环境限制

  1. 强制使用严格模式(use strict)。
  2. 禁止使用eval()
  3. 禁止使用with() {}
  4. 禁止以字符串为代码创建函数。

(二)语法差异

标准TS/JS中JSON数字格式要求小数点后必须有数字,方舟运行时允许2.e3这类科学计数法。

综上所述,ArkTS在多方面的改进和特性使其相比TS更具优势,在鸿蒙Next开发中进行ArkTS语法适配有助于提升程序质量和开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/857314.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业的内外网数据交换方案 可解决安全、效率、便捷3大问题!

内外网数据交换是很多企业和行业都会面临的场景,既然隔离了内外网,重中之重就是要确保数据的安全性,其次在数据流转交换过程中,不能太繁琐复杂,需要让用户快速、便捷的进行数据交换。首先我们来看看,在进行内外网数据交换时,对于安全、效率、便捷这些方面的需求和挑战有…

Ftrans文件摆渡系统 让跨网文件传输更快捷、更安全!

很多含有敏感信息的行业,包括但不限于:集成电路、政府、金融、能源、医疗、制造以及一些高新技术企业,都会采用网络隔离的方式来保护核心数据,这就产生了跨网文件传输的业务场景。面临这种场景,最好是采用专业的文件摆渡系统来解决传输和管控问题。 一、跨网文件传输的业…

【差分约束】学习笔记

LearningBasic Tips 差分约束,即为存在一个差分约束系统,即类似 \(x_i - x_j \leq k\) 的 \(n\) 元一次不等式组,求出一组解使得该组内所有不等式全部成立,即 \(x_1 = s_1,x_2 = s_2 \dots x_n = s_n\),否则判无解。 对于满足条件的一个解集 \(\{s_1,s_2,s_3,\dots,s_n\}\…

AI车牌监测识别摄像机

AI车牌监测识别摄像机是一种基于人工智能技术的高级监控设备,用于识别和记录车辆的车牌信息。该摄像机利用深度学习算法和图像识别技术,能够快速准确地捕捉车辆牌照信息,有助于提高交通安全管理和追踪犯罪嫌疑车辆。AI车牌监测识别摄像机是一种基于人工智能技术的高级监控设…

dedecms报错The each() function is deprecated

打开报错提示文件对应的行数 把 while (list($key) = each($val)) 改成foreach ($val as $key => $value)扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修…

dedecms文章简介标签infolen控制字数的方法

方法一:底层标签 [field:description/] 改成 [field:infos/] 方法二: [field:description function=cn_substr(@me,66)/]扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网…

后台管理登陆一直显示管理员密码错误?

有时浏览器缓存或Cookie可能导致登录问题。清除浏览器缓存和Cookie,或者尝试使用隐身模式或不同浏览器登录,排除浏览器相关问题。 1. 验证密码修改成功 如果你最近修改了密码,确保修改操作确实成功。通过主机提供商控制面板或直接在数据库中检查管理员用户的密码哈希值是否已…

网站被黑,现在登录后台密码错误。

处理网站被黑且后台密码错误的问题,建议按照以下步骤进行:确保安全立即断开受感染服务器的网络连接以防止进一步攻击。 检查是否有其他入口点(如FTP、SSH)也被攻破。评估损害审查日志文件(访问日志、错误日志等),确定入侵时间和方法。 使用文件完整性检查工具对比原始安…

网站后台显示用户名或密码错误,无法登录

当网站后台显示用户名或密码错误且无法登录时,可以按照以下逻辑步骤进行排查和处理:验证输入信息确认输入的用户名和密码是否正确,注意大小写敏感。 尝试使用其他已知正确的管理员账户登录。检查浏览器缓存和Cookie清除浏览器缓存和Cookie,或者尝试使用隐身模式或不同浏览器…

服务器重启后站点仍无法访问

服务器重启后,客户反馈网站仍然无法访问,应该如何处理? 答案:您好,建议您进行以下操作:检查网络连接: 断开并重新连接本地网络设备,确保网络畅通。 测试服务器端口: 测试80端口是否通畅,若仍无法访问,请提交工单至云服务器技术支持部门。非常感谢您的支持!由此给您…

域名状态为HOLD,如何解除?

问题:域名状态显示为HOLD,已经按要求上传资料并通过实名认证,但状态仍未更新。如何解除HOLD状态? 答案:您好,遇到域名状态为HOLD的情况,请联系域名管理机构或公安部电话专线(张警官),咨询申诉流程并说明情况。具体步骤如下:联系相关部门: 提供域名相关信息,申请解…

如何为域名及其二级域名添加HTTPS支持?

为域名及其二级域名添加HTTPS支持,可以按照以下步骤操作:购买SSL证书:选择合适的SSL证书类型(如单域名、通配符证书),并完成购买。 安装SSL证书:根据服务器类型(如Apache、Nginx),按照官方文档安装SSL证书。 配置强制HTTPS:在服务器配置文件(如.htaccess)中添加重…