HarmonyOS Next 原生应用开发-从TS到ArkTS的适配规则(一)

一、强制使用静态类型
静态类型是ArkTS最重要的特性之一。如果程序采用静态类型,即所有类型在编译时都是已知的,那么开发者就能够容易理解代码中使用了哪些数据结构。同时,由于所有类型在程序实际运行前都是已知的,编译器可以提前验证代码的正确性,从而可以减少运行时的类型检查,有助于提升性能。
基于上述考虑,ArkTS中禁止使用any类型。
示例

// 不支持:
let res: any = some_api_function('hello', 'world');
// `res`是什么?错误代码的数字?字符串?对象?
// 该如何处理它?
// 支持:
class CallResult {public succeeded(): boolean { ... }public errorMessage(): string { ... }
}let res: CallResult = some_api_function('hello', 'world');
if (!res.succeeded()) {console.log('Call failed: ' + res.errorMessage());
}

any类型在TypeScript中并不常见,只有大约1%的TypeScript代码库使用。一些代码检查工具(例如ESLint)也制定一系列规则来禁止使用any。因此,虽然禁止any将导致代码重构,但重构量很小,有助于整体性能提升。
二、禁止在运行时变更对象布局
为实现最佳性能,ArkTS要求在程序执行期间不能更改对象的布局。换句话说,ArkTS禁止以下行为:
向对象中添加新的属性或方法。
从对象中删除已有的属性或方法。
将任意类型的值赋值给对象属性。
TypeScript编译器已经禁止了许多此类操作。然而,有些操作还是有可能绕过编译器的,例如,使用as any转换对象的类型,或者在编译TS代码时关闭严格类型检查的配置,或者在代码中通过@ts-ignore忽略类型检查。
在ArkTS中,严格类型检查不是可配置项。ArkTS强制进行部分严格类型检查,并通过规范禁止使用any类型,禁止在代码中使用@ts-ignore。
示例

class Point {public x: number = 0public y: number = 0constructor(x: number, y: number) {this.x = x;this.y = y;}
}// 无法从对象中删除某个属性,从而确保所有Point对象都具有属性x
let p1 = new Point(1.0, 1.0);
delete p1.x;           // 在TypeScript和ArkTS中,都会产生编译时错误
delete (p1 as any).x;  // 在TypeScript中不会报错;在ArkTS中会产生编译时错误// Point类没有定义命名为z的属性,在程序运行时也无法添加该属性
let p2 = new Point(2.0, 2.0);
p2.z = 'Label';           // 在TypeScript和ArkTS中,都会产生编译时错误
(p2 as any).z = 'Label';   // 在TypeScript中不会报错;在ArkTS中会产生编译时错误// 类的定义确保了所有Point对象只有属性x和y,并且无法被添加其他属性
let p3 = new Point(3.0, 3.0);
let prop = Symbol();      // 在TypeScript中不会报错;在ArkTS中会产生编译时错误
(p3 as any)[prop] = p3.x; // 在TypeScript中不会报错;在ArkTS中会产生编译时错误
p3[prop] = p3.x;          // 在TypeScript和ArkTS中,都会产生编译时错误// 类的定义确保了所有Point对象的属性x和y都具有number类型,因此,无法将其他类型的值赋值给它们
let p4 = new Point(4.0, 4.0);
p4.x = 'Hello!';          // 在TypeScript和ArkTS中,都会产生编译时错误
(p4 as any).x = 'Hello!'; // 在TypeScript中不会报错;在ArkTS中会产生编译时错误// 使用符合类定义的Point对象:
function distance(p1: Point, p2: Point): number {return Math.sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
}
let p5 = new Point(5.0, 5.0);
let p6 = new Point(6.0, 6.0);
console.log('Distance between p5 and p6: ' + distance(p5, p6));

修改对象布局会影响代码的可读性以及运行时性能。从开发者的角度来说,在某处定义类,然后又在其他地方修改实际的对象布局,很容易引起困惑乃至引入错误。此外,这点还需要额外的运行时支持,增加了执行开销。这一点与静态类型的约束也冲突:既然已决定使用显式类型,为什么还需要添加或删除属性呢?
当前,只有少数项目允许在运行时变更对象布局,一些常用的代码检查工具也增加了相应的限制规则。这个约束只会导致少量代码重构,但会提升性能。

本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。

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

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

相关文章

【UE 网络】多人游戏开发时应该如何区分客户端逻辑和服务端逻辑 入门篇

目录 0 引言1 服务器和客户端逻辑1.1 服务器职责1.2 客户端职责 2 函数会在客户端执行还是服务端?2.1 只在客户端执行的函数RepNotifyClient RPCMulticast RPC 2.2 只在服务端执行的函数GameModeServer RPC 2.3 在两端都可以执行的函数GetNetMode() 和 HasAuthority…

LangGraph 和 AutoGen 的对比

LangGraph 和 AutoGen 都是用于构建大型语言模型 (LLM) 应用程序的框架。它们都旨在使开发人员更容易地控制 LLM 并使其适应特定任务。但是,这两种框架之间存在一些关键差异。 代理架构 LangGraph 和 AutoGen 之间最大的区别在于代理的构建方式。LangGraph 使用更…

用C#的MediaDevices程序集打开MTP设备(用usb线连接的手机)的文件夹

一、任务描述 1、可以访问MTP设备的桌面程序。 MTP设备:支持媒体传输协议(MTP)的设备,MTP简单来说就是一种PC与其他设备相连的一种协议,智能手机、平板电脑、数码相机等可以通过 USB 连接到电脑,并通过 MTP 协议传输媒体文件。点…

PLC_博图系列☞F_TRIG:检测信号下降沿

PLC_博图系列☞F_TRIG:检测信号下降沿 文章目录 PLC_博图系列☞F_TRIG:检测信号下降沿背景介绍F_TRIG: 检测信号下降沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 F_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

httpx.HTTPStatusError: Client error ‘429 Too Many Requests‘ for url ‘

httpx.HTTPStatusError: Client error ‘429 Too Many Requests’ for url ‘https://open.bigmodel.cn/api/paas/v4/chat/completions’ For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429 错误解释: httpx.HTTPStatusE…

LeetCode:3115. 质数的最大距离(Java 筛质数)

目录 3115. 质数的最大距离 题目描述: 实现代码与解析: 筛质数 原理思路: 3115. 质数的最大距离 题目描述: 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示…

Swift中的二分查找:全面指南

Swift中的二分查找:全面指南 简介 二分查找是计算机科学中的经典算法,被广泛用于在已排序的数组中高效地搜索目标值。与线性查找逐个检查每个元素不同,二分查找不断将搜索区间减半,因此在处理大数据集时要快得多。 在这篇博客中…

从零到百万用户的扩展之路

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/design-system 设计一个支持数百万用户的系统是极具挑战性的,它是一段需要持续优化和不断改进的旅程。在这篇博客中,我们将构建一个支持单个用…

NC13611 树(dfs序+区间dp)

链接 思路&#xff1a; 容易知道对于同一种颜色的子图一定是仅由该颜色的点连通的。设我们要划分的个数为x&#xff08;x<k&#xff09;&#xff0c;也就是说我们要选出x-1条边&#xff0c;这里有种情况。那么我们需要选出x种颜色&#xff0c;这里有种情况。然后我们需要将…

英国Assignment写作怎么积累经验?

最近很多留学生每天都要熬夜&#xff0c;吓死宝宝了。关键是最后还是会fall了啊&#xff01;其实英国Assignment写作是要靠日积月累的写作经验的&#xff0c;虽然阅读量和写作水平无法一日千里&#xff0c;但是写作技巧却是可以速成的&#xff0c;我们一起来看看吧。 选题定方…

单线服务器有什么作用?

什么是单线服务器&#xff1f;单线服务器是指只有一条物理线路可以接入的服务器&#xff0c;这表明所有的数据信息与用户的访问请求都只能通过这一条线路来进行传输&#xff0c;因此单线服务器在服务器的性能与可扩展性方面有着一定的限制。 单线服务器与双线服务器相比&#x…

双端队列广搜——AcWing 175. 电路维修

双端队列广搜 定义 双端队列广搜&#xff08;Breadth-First Search with a Deque&#xff09;是一种图或树的遍历算法变体&#xff0c;它利用了双端队列&#xff08;Deque&#xff0c;全称Double Ended Queue&#xff0c;允许在其两端进行插入和删除操作&#xff09;作为数据…

1996-2023年各省财政收支数据(无缺失)(地方财政一般预算收入、地方财政一般预算支出)

1996-2023年各省财政收支数据&#xff08;无缺失&#xff09;&#xff08;地方财政一般预算收入、地方财政一般预算支出&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴、 3、指标&#xff1a;地方财政一般预算收入、地方财政一般预算…

跨境业务经验推荐:三大优秀的IP代理服务商

作为一名多年从事跨境业务的老手&#xff0c;今天我要给大家介绍几款绝对靠谱的IP代理服务商&#xff0c;保证让你的全球业务更加顺畅&#xff01; 1. 711Proxy 711Proxy以其优秀的性能和覆盖范围广而著称。对于跨境电商和国际业务来说&#xff0c;快速稳定的网络连接至关重要…

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程

在使用计算机中&#xff0c;如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办&#xff1f;这个是非常常见问题&#xff0c;下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法&#xff01; 一、d3dx9…

Zynq—按键控制LED灯闪烁

一、GPIO简介 ZYNQ 的 IO包括对外连接的 GPIO 和内部 PS 与 PL 通信的 AXIO。其中对外的 GPIO 又分为 两种&#xff1a; MIO 和 EMIO。 MIO 和 EMIO 只是 GPIO 信号的两种接口&#xff0c; MIO 直连到PS(数量有限)&#xff0c; EMIO 则是 PS 扩展到 PL&#xff0c;从 PL 接出的…

UTONMOS:探索未来区块链与元宇宙的游戏奇妙融合

在科技的飞速发展浪潮中&#xff0c;区块链技术正以前所未有的力量重塑着各个领域&#xff0c;而游戏行业也迎来了一场前所未有的变革——元宇宙游戏的崛起。 元宇宙&#xff0c;这个充满无限想象的虚拟世界&#xff0c;让玩家能够沉浸其中&#xff0c;体验超越现实的奇幻之旅。…

springboot评选投票系统-计算机毕业设计源码15837

摘 要 本文介绍的是基于Spring Boot开发的评选投票系统小程序。该系统旨在为用户提供一个便捷、高效的平台&#xff0c;以实现评选活动的投票功能。随着社交媒体和互联网的普及&#xff0c;评选活动已成为各行业中常见的形式&#xff0c;如最佳歌曲、最佳演员等。然而&#xf…

【SQL Server数据库】数据库完整性实验

目录 一、要求 1、认真学习三类完整性、CHECK短语、CONSTRAINT字句的使用&#xff0c;完成下列内容。 1.1 根据上表&#xff0c;在TEST数据库中建立数据表Table1。 1.2 在TEST数据库中创建Table2&#xff0c;只含各个基本列&#xff08;包括列名和数据类型&#xff0c;标识…

一. 信息安全.基础概念.概论

2016年《国家网络空间安全战略》、2017年6月1日实施《中华人民共和国网络安全法》、 网络空间安全已被增设为一级学科&#xff1b; CNCERT/CC---National Computer Network Emergency Response Technical Team/Coordination Center of China,工业和信息化部下属,国家计算机网…