ArkTs :5 分钟学会鸿蒙开发语言关键知识

ArkTS 是 HarmonyOS 首选的开发语言,它在 TypeScript 的基础上做了一些优化和扩展,继承了 TypeScript 的优点,屏蔽了 TypeScript 的缺点,和 ArkUI 框架一起构建了鸿蒙应用,这篇文章我们主要介绍 ArkTS。

ArkTS 设计初衷旨在提高开发效率、代码质量和性能,所以需要满足以下场景。

  • 在实际工作中,代码阅读频率远远高于编写频率,因此 ArkTS 代码需非常容易阅读和理解
  • 以最小功耗快速执行代码

考虑到上面两点,因此在 ArkTS 中要求强制使用静态类型,这意味着在 ArkTS 中,你需要在声明变量、函数参数、函数返回值等时指定类型,并且在编译时会进行严格的类型检查。由于所有类型在程序运行前都是已知的,开发人员非常容易理解代码中使用了哪些数据结构,并且编译器可以提前验证代码的正确性,从而可以减少运行时的类型检查,有助于提升性能。

通过强制使用静态类型,ArkTS 提供了更强大的类型约束和类型推断功能,有助于在编译时捕获潜在的类型错误,提高代码的可靠性和可维护性。这种设计有助于开发者编写更加健壮和可靠的代码。

相比于 不使用静态类型,在实际开发中,为了方便如果不使用,可能会导致一些问题:

  • 难以捕获类型错误:如果不使用静态类型,很容易在代码中引入类型错误,这些错误可能只能在运行时被发现,降低了代码的可靠性。
  • 降低了开发效率:静态类型可以提供更好的代码补全、类型检查和重构支持。如果不使用静态类型,无法提供这些支持,降低了开发效率
  • 代码维护成本高:没有静态类型,代码的可读性和可维护性可能会下降

所以 ArkTS 在 TypeScript 的基础上,进一步完善了语言上的缺陷,无论是性能还是代码的可读性都非常的高,后面的文章我会单独分析 ArkTS 都屏蔽了 TypeScript 那些缺陷。

由于官网对于 ArkTS 的讲解太少了,而 ArkTS 是开发鸿蒙应用的关键,这篇文章主要介绍 ArkTS 的基础知识点。

我们先来看一下在 ArkTS 中用什么来声明一个变量。

let 和 const

在 ArkTs 中用关键字 let 和 const 声明变量。它们有些相同和不同之处,我们一起来分析一下。

let 和 const 不同之处

let 声明的变量是可变的,可以被再次赋值,而 const 声明的常量是不可变的,初始化完,值就不能被改变。

getData() {
   let name = "ByteCode";
   name = "DHL" // ok
   const age = 18;
   age = 20; // 这里会报错 Cannot assign to 'age' because it is a constant.
}

在上面的代码中,想尝试修改常量 age 的值,这个时候编译器会提示这是个常量不能被修改。

从结果来看被 const 修饰的变量的值不能被改变,但是实际上并不是变量的值不能被改变,而是变量指向的那个内存地址所保存的数据不能改变。

对于基本数据类型(数值、字符串、布尔值等等),变量指向的内存地址保存的是变量的值 ,因此初始化完不能被改变。

const number = 1;

在上面的代码中,number 指向的内存地址保存的是 number 初始化的值,因此 number 被声明之后不能被改变。

对于复杂数据类型(对象和数组)的变量指向的是内存地址,保存的是指向实际数据的指针,因此 const 只能保证内存地址保存的指针不能被改变,而它指向的实际数据是可以改变的。我们来看一段示例。

const language: string[] = ['ArkTs', 'Java', 'Kotlin'];
language[0] = "ByteCode"; // ok
const people: string[] = ['zhangsan', 'xiaohong', 'xiaoming'];
language = people; // 报错

我们可以通过索引修改数组 language,但是不能将 language 指向另外一个常量 people,否则就会报错。从这个例子我们可以知道 const 只能保证对象的指针不能被改变,但是对象里面的内容可以改变。

什么情况下使用 let 和 const

let 和 const 唯一的区别就是可变和不可变,let 可变,而 const 不可变。

因此在使用时,如果变量的值会发生变化,可以选择使用 let,而对于不会改变的常量值,应该选择 const,这样有助于提高代码的可读性和可维护性。

实际上我们在做业务需求的时候,大部分情况下都是接受数据(可能来自网络、本地、前一个页面),收到数据之后渲染 UI,所以这个时候数据是不会变的我们可以使用 const,但是如果我们要控制部分 UI 是否展示,这个情况可能需要使用 let。

let 和 const 相同之处

let 和 const 的作用域是相同,都是在声明所在的块级作用域内有效。

if (true) {
 let age = 18; // age 只在 if 语句内有效
}
if (true) {
 const name = "DHL"; // name 只在 if 语句内有效
}
try {
   //            
}catch (e) {
   变量 e 只能在 catch 范围内
}

无论是 let 还是 const 只能在它声明所在代码块内有效,只不过使用的场景有些不同,比如在 for 循环中,循环变量只能使用 let 声明。

for (let i = 0; i < 10; i++) {
 // ...
}

在上面的代码中,循环变量i只在 for 循环体内有效,在循环体外引用就会报错,但是需要注意了,在 ArkTS 中不能使用for .. in,否则会有一个编译警告。

之所以不能使用for .. in是因为在 ArkTS 中,对象的布局在编译时是确定的,且不能在程序执行期间更改对象的布局,换句话说,ArkTS 禁止以下行为:

  • 向对象中添加新的属性或方法
  • 从对象中删除已有的属性或方法
  • 将任意类型的值赋值给对象属性

如果修改对象布局会影响代码的可读性以及运行时性能。从开发的角度来说,在某处定义类,然后又在其它地方修改了实际对象布局,这很容易引入错误,另外如果修改对象布局,需要在运行时支持,这样会增加执行开销降低性能。

for 循环还有一个特别的地方,我们来看看下面的代码,按照你多年的经验,你能在不执行代码的情况下,说出下面代码的运行结果吗。

for (let i = 0; i < 3; i++) {
 let i = 'abc';
 console.log(i);
}

以上代码是可以正常运行的,答案是输出了 3 个 abc,这就说明 for 循环内部声明的变量i和循环变量i不在同一个作用域,它们有各自单独的作用域。如果在同一个作用域,是不可使用 let 或者 const 重复声明相同名字的变量。比如下面的代码会报错。

if(true){
   let a = 1;
   let a = 2; // 报错
   
   const b = 3;
   const b = 4; // 报错
}

基本数据类型

ArkTS 支持与 TypeScript 几乎相同的数据类型,如布尔型、数字、字符串、数组、枚举 等。

布尔值

let isDone: boolean = false;
const isDone: boolean = false;

数字

所有数字都是浮点数,这些浮点数的类型是number。

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
const binaryLiteral: number = 0b1010;
const octalLiteral: number = 0o744;

字符串

用string表示字符串类型,我们可以使用双引号(")或单引号(')声明一个字符串。

let name: string = "DHL";
const publicName: string = "ByteCode";

我们还可以使用模板字符串,这种字符串是被反引号包围,并且以${expr}这种形式嵌入表达式。

let name = "DHL";
const content = `My name is ${name}`

数组

在 ArkTS 中有两种方式创建数组。

  • 元素类型后面接上 []
let list: number[] = [1, 2, 3];
  • 使用数组泛型Array<元素类型>
let list: Array<number> = [1, 2, 3];

但是这里需要注意了,如果可以从传递给泛型函数的参数中推断出具体类型,ArkTS 允许省略泛型类型实参。否则,需要指定泛型类型实参,不然会报错。

枚举

用enum表示枚举类型。

export enum ResponseCode{
 SUCCESS =  1000,
 FAILED = 2000

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→《鸿蒙星河版开发教程指南》

鸿蒙(Harmony NEXT)最新学习路线

有了路线图,怎么能没有学习资料呢,小编也准备了几套HarmonyOS NEXT学习视频 内容包含以下联

内容包含:ArkTS、TypeScript、ArkUI、资源分类…等知识点。

获取完整版高清学习路线,请点击→《HarmonyOS教学视频

HarmonyOS教学视频

鸿蒙语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取白皮书:请点击→《鸿蒙生态应用开发白皮书V2.0PDF》

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《鸿蒙基础入门学习指南》

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】TinyML的介绍以及在运动健康领域的应用

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

大华 DSS 数字监控系统 attachment_clearTempFile.action SQL注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 向 attachment_clearTempFile.action 路由发送特殊构造的数据包,利用报错注入获取…

peft模型微调_IA3

IA3(论文:Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning),通过学习向量来对激活层加权进行缩放,从而获得更强的性能,同时仅引入相对少量的新参数,如下图左边所示,它的诞生背景是为了改进 LoRA。 为了使微调更有效,IA3(通…

QQ聊天的快捷回复怎么设置?

在快节奏的商务环境中&#xff0c;每一秒都至关重要。对于在线客服而言&#xff0c;快速而准确地回应客户咨询可以显著提升服务质量和客户满意度。如果你在使用QQ进行客户服务工作&#xff0c;需要更快捷回复客户信息&#xff0c;可以设置快捷回复&#xff0c;那我们就来看看怎…

演讲恐惧症?别怕!这3招帮你克服舞台紧张

演讲恐惧症&#xff1f;别怕&#xff01;这3招帮你克服舞台紧张 在人生的舞台上&#xff0c;演讲往往被视为展现个人才华、传递思想观点的重要平台。然而&#xff0c;对于许多人来说&#xff0c;站在舞台上却成为了一种难以克服的恐惧。演讲恐惧症&#xff0c;这个看似微不足道…

【动态规划】算法例题

目录 一维动态规划&#xff1a; 137. 爬楼梯 ① 138. 打家劫舍 ② 139. 单词拆分 ② 140. 零钱兑换 ② 141. 最长递增子序列 ② 多维动态规划&#xff1a; 142. 三角形最小路径和 ② 143. 最小路径和 ② 144. 不同路径 II ② 145. 最长回文子串 ② 146. 交错字符串…

7.安全性基础知识

主要议题&#xff1a; 安全防护体系&#xff1a;7层次&#xff0c;要记7层次的名称以及这些层次与哪些方面相关&#xff1b; 安全保护等级&#xff1a;5等级&#xff0c;要记5等级安全性的高低排序&#xff0c;掌握每个等级的特点&#xff1b; 用户认证机制&#xff1a;用户认…

JAVA学习日记十二(File类与IO流)

1.File类的使用 一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆对象&#xff09; File 能新建、删除、重命名文件和目录&#xff0c;但 File 不能访问文件内容本身。如果…

OSPF路由汇总

OSPF只要是环回接口&#xff08;默认P2P网络类型&#xff09;&#xff0c;默认都是32位的叶子信息。手动修改&#xff0c;[R1-LoopBack0]ospf network-type broadcast&#xff1b;修改网络类型。 OSPF不支持自动汇总&#xff0c;需要手动汇总。 一、OSPF路由汇总 使用CIDR技术…

2024 用CleanMyMac X为您的MAC清理提速吧

CleanMyMac X 是由 MacPaw 公司开发的一款针对 macOS 操作系统的电脑清理工具。它可以帮助用户清理电脑中的垃圾文件、卸载不需要的软件、优化电脑性能等。它的界面简洁明了&#xff0c;操作简单易懂&#xff0c;非常适合普通用户使用。 链接: https://pan.baidu.com/s/1_TFnrI…

Redis数据结构对象中的类型检查与命令多态、内存回收

类型检查与命令多态 概述 redis中用于操作键的命令基本上可以分为两种类型。其中一种命令可以对任何类型的键执行&#xff0c;比如说DEL命令、EXPIRE命令、RENAME命令、TYPE命令、OBJECT命令等. 而另一种命令只能对特定类型的键执行&#xff0c;比如说 1.SET、GET、APPEND、…

1688无货源一件代发怎么做?附详细流程图!

大家喜欢在1688上做一件代发&#xff0c;因为1688拥有庞大的供应商资源&#xff0c;商家可以轻易找到优质、低价的产品。其次&#xff0c;平台信誉度高&#xff0c;交易安全可靠&#xff0c;1688还提供了一系列便捷的服务和工具&#xff0c;帮助商家高效管理订单、物流&#xf…

vulnhub-----SickOS靶机

文章目录 1.信息收集2.curl命令反弹shell提权利用POC 1.信息收集 ┌──(root㉿kali)-[~/kali/vulnhub/sockos] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, IPv4: 10.10.10.10 Starting arp-scan 1.9.8 with 256…

小米汽车定价较预期下调3万至5万,发布之前仍有可能微调

跨界造车的新势力小米汽车正逐渐揭开其神秘面纱。最新爆料显示&#xff0c;小米汽车内部对车辆的定价进行了讨论&#xff0c;较之前的预期下调了3万至5万的幅度。然而&#xff0c;在正式发布之前&#xff0c;这一价格仍有可能进行微调。 历经三年的精心筹备&#xff0c;小米汽车…

用Python的turtle库绘制皮卡丘

turtle库的简介 turtle(海龟)库是turtle绘图体系的python实现&#xff0c;turtle库是一种标准库&#xff0c;是python自带的。 turtle(海龟)是一种真实的存在&#xff0c;有一个海龟在窗口的正中心&#xff0c;在画布上游走&#xff0c;走过的轨迹形成了绘制的图形&#xff0…

vr虚拟现实游戏世界介绍|数字文化展览|VR元宇宙文旅

虚拟现实&#xff08;VR&#xff09;游戏世界是一种通过虚拟现实技术创建的沉浸式游戏体验&#xff0c;玩家可以穿上VR头显&#xff0c;仿佛置身于游戏中的虚拟世界中。这种技术让玩家能够全方位、身临其境地体验游戏&#xff0c;与游戏中的环境、角色和物体互动。 在虚拟现实游…

如何快速搭建一个完整的vue2+element-ui的项目-二

技术细节-继续配置 提示&#xff1a;你以为这样就完了吗,其实还有很多东西需要我们自己手写的 例如&#xff1a; element-ui的配置样式重置配置src使用的配置elinst配置axios异步请求的二次封转配置语言国际化配置(这个看需求,我这里就不用配置了)vuex的配置mixins的配置开发环…

2万多个手机壁纸电脑壁纸图片ACCESS\EXCEL数据库

图片类的大数据我记得有《4万多论坛头像个性头像》、《近3万个斗图头像图片大全》、《近5000张趣图有趣GIF动画图》、《8千多JPG趣图内涵段子图》&#xff0c;但是比起今天的壁纸大全数据库来说&#xff0c;容量方面又不是很大&#xff0c;今天搞到的手机静态壁纸虽然记录数才2…

FreeRtos中段管理-----参考正点原子

什麽是中断&#xff1f; 让CPU打断正常运行的程序&#xff0c;转而去处理紧急的事件&#xff08;程序&#xff09;&#xff0c;就叫中断 中断执行机制&#xff0c;可简单概括为三步&#xff1a; 1&#xff0c;中断请求&#xff1a;外设产生中断请求&#xff08;GPIO外部中断、定…

基于springboot+vue的社区养老服务系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…