鸿蒙入门开发 Arkts语言

news/2025/3/29 15:07:47/文章来源:https://www.cnblogs.com/huainahai/p/18785557

ArkTS 基础语法

编程语言介绍

什么是 ArkTS?

ArkTS 是 HarmonyOS 生态的应用开发语言。它基于 TypeScript(TS),并在此基础上进行了增强和优化,提供了声明式 UI 范式、状态管理支持等能力,帮助开发者以更简洁、自然的方式开发应用。ArkTS 强化了静态类型检查,支持并发编程增强,并与 TS/JS 生态高效互操作,兼容性良好。

ArkTS 的主要特点包括:

  • 静态类型检查:在编译阶段检测更多错误,提升代码健壮性。
  • 并发编程增强:优化了并发编程的支持,提升性能。
  • 空值安全:通过类型系统减少空指针异常。
  • 声明式 UI:提供声明式 UI 开发范式,简化 UI 开发。

ArkTS 基于 TypeScript 的增强

1. 强化静态类型检查

ArkTS 要求所有类型在程序运行前必须明确,减少运行时的类型检测,从而提升性能。

// TypeScript 允许动态类型推断
const area = {pixels: new ArrayBuffer(8),offset: 0,stride: 8,region: {size: {height: 1,width: 2},x: 0,y: 0}
};// ArkTS 中需要明确类型
import { image } from '@kit.ImageKit';const area: image.PositionArea = {pixels: new ArrayBuffer(8),offset: 0,stride: 8,region: {size: {height: 1,width: 2},x: 0,y: 0}
};

2. 限制运行时对象布局的修改

ArkTS 禁止在运行时动态修改对象的结构(如添加或删除属性),以确保性能优化。

// TypeScript 允许动态修改对象
class User {name: string = '';age: number = 20;
}
let user = new User();
(user as any).department = 'XX'; // 动态添加属性
delete (user as any).department; // 动态删除属性// ArkTS 中需要在类定义时明确所有属性
class User {name: string = '';age: number = 20;department?: string; // 可选属性
}
let user = new User();
user.department = 'XX'; // 正常赋值
user.department = undefined; // 置空可选属性

ArkTS 对 UI 的拓展

1. 声明式 UI 描述

ArkTS 提供了声明式 UI 开发范式,通过装饰器、自定义组件和内置组件,简化 UI 开发。

@Entry
@Component
struct MyComponent {@State message: string = 'Hello, ArkTS!';build() {Column() {Text(this.message).fontSize(20).onClick(() => {this.message = 'Clicked!';});}}
}

2. 状态管理

ArkTS 支持状态驱动 UI 更新,状态变化会自动触发 UI 重新渲染。

@State count: number = 0;build() {Column() {Text(`Count: ${this.count}`).fontSize(20);Button('Increment').onClick(() => {this.count += 1; // 状态更新,UI 自动刷新});}
}

基本语法

变量与常量

  • 使用 let 声明变量。
  • 使用 const 声明常量。
let count: number = 0;
count = 10;const MAX_COUNT: number = 100;

类型系统

基本类型

let name: string = 'Alice';
let age: number = 25;
let isActive: boolean = true;enum Color {Red,Green,Blue
}
let favoriteColor: Color = Color.Blue;

引用类型

let numbers: Array<number> = [1, 2, 3];
let names: string[] = ['Alice', 'Bob', 'Charlie'];class Person {name: string = '';age: number = 0;
}
let person: Person = new Person();

联合类型与类型别名

let id: number | string = 123;
id = 'ABC';type Point = {x: number;y: number;
};
let position: Point = { x: 10, y: 20 };

空值安全

ArkTS 通过类型系统避免空指针异常。

let name: string | null = null;// 空值安全判断
if (name !== null) {console.log(name.length);
}// 空值合并运算符
const displayName = name ?? 'Unknown';

条件与循环

条件语句

let isReady: boolean = Math.random() > 0.5;if (isReady) {console.log('Ready!');
} else {console.log('Not ready!');
}let status = isReady ? 'Ready' : 'Not ready';

循环语句

let numbers: number[] = [1, 2, 3, 4, 5];// for 循环
for (let i = 0; i < numbers.length; i++) {console.log(numbers[i]);
}// while 循环
let index = 0;
while (index < numbers.length) {console.log(numbers[index]);index++;
}// for...of 循环
for (let num of numbers) {console.log(num);
}

函数

函数声明

function greet(name: string): void {console.log(`Hello, ${name}!`);
}
greet('Alice');

箭头函数

const greet = (name: string) => console.log(`Hello, ${name}!`);
greet('Bob');

闭包

function createCounter(): () => number {let count = 0;return () => {count++;return count;};
}let counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

面向对象编程

类与对象

class Person {name: string = '';age: number = 0;constructor(name: string, age: number) {this.name = name;this.age = age;}greet(): void {console.log(`Hello, my name is ${this.name}.`);}
}let person = new Person('Alice', 25);
person.greet();

继承与多态

class Employee extends Person {department: string = '';constructor(name: string, age: number, department: string) {super(name, age);this.department = department;}greet(): void {super.greet();console.log(`I work in ${this.department}.`);}
}let employee = new Employee('Bob', 30, 'Engineering');
employee.greet();

模块化

导出与导入

// person.ts
export class Person {name: string = '';age: number = 0;
}// main.ts
import { Person } from './person';
let person = new Person();
person.name = 'Alice';

总结

ArkTS 是 HarmonyOS 生态的核心开发语言,基于 TypeScript 并进行了增强,提供了更强大的静态类型检查、并发编程支持和声明式 UI 开发能力。通过本文档的学习,您可以掌握 ArkTS 的基础语法和核心特性,为开发 HarmonyOS 应用打下坚实基础。

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

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

相关文章

信创麒麟V10操作系统安装Kong网关

总览 随着国家对信息安全和自主可控技术的日益重视,信创改造正成为各大企业及政府部门的重要任务。公司目前在x86架构的Red Hat系统上部署了Kong网关2.2.1,并且通过官方RPM包实现了快速部署。为了顺应信创转型,现阶段需要在aarch64架构的信创麒麟v10系统上部署Kong网关。 由…

wsl kali 系统安装gvm (openVAS)

1. 更新系统 首先,确保系统是最新的: sudo apt update sudo apt upgrade -y2. 安装GVM(OpenVAS) Kali Linux官方仓库中已经包含了GVM(OpenVAS)的安装包。你可以通过以下命令安装: sudo apt install gvm3. 初始化GVM 安装完成后,需要初始化GVM。运行以下命令: sudo gvm…

day34 rsync备份任务的实战

06-备份任务实战 今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用。先看需求 再讲解 再次动手实践客户端需求 客户端需求: 1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录) 2.客户端备份的数据必须存放至以 "主机名_ip地址_当…

dotnet-cnblogs-tool-cnblog

1. 解决的问题: 在本地编辑 md 后,如果有图像,直接复制该 md 到 博客园,或者使用 vscode 插件,会自动上传到博客园,但是上传后,因为没有真正上传图片,图片会无法显示。 2. 解决方法: 参考: dotnet-cnblogs-tool 本文环境为 linux 环境。直接下载 dotnet-cnblogs-tool…

可视化图解算法:链表相加( 两数相加)

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表…

VUE中使用BroadcastChannel实现同源多页面实时通信

使用BroadcastChannel广播通信 准备工作:1.channel.js文件,内容如下const Channel = {/*** BroadcastChannel对象Map*/channelMap: new Map(),/*** 发送消息,重载方法,可直接调用,省略对象实例化操作* @param {*} channelName 通道名称,用以区分不同的通道* @param {*} o…

halcon 入门教程(五) 缺陷检测

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18785484有兴趣可以多看其他的halcon教程halcon 学习教程目录本篇主要讲一些常见的缺陷检测方法,目前只会讲一些,后面有空的话会不断的补充完整。因为缺陷的种类实在太多太多了,各种各样的缺陷可能都要用各种…

万字长文详解SIFT特征提取

本文对 SIFT 算法进行了详细梳理。SIFT即尺度不变特征变换(Scale-Invariant Feature Transform),是一种用于检测和描述图像局部特征的算法。该算法对图像的尺度和旋转具有不变性,并且在一定程度上能够抵御亮度变化和视角变化,具备较强的鲁棒性。此外,SIFT检测流程还提出了…

记录---学习项目如何用Docker部署

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 写在前面 Docker对比传统虚拟机 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效…

龙信年终技术考核wp

龙信年终技术考核wp 容器密码:MjAyNeWKoOayuQ== 假期里打的第一场取证比赛,一开始名次还挺高,后面服务器不太会做了,排名直接狂掉,获奖的名额太少了。其实上学期打的第一场取证也是龙信办的龙信杯,真的好难,还是这个友好。 1. 分析手机备份文件,该机主的QQ号为?(标准格…

规则系统|第二步 连接数据库

1.输出所有的数据库名2.问一下相关负责人这个需求放到哪个库里ssc: {ENGINE: django.db.backends.mysql, NAME: ssc, USER: star, PASSWORD: dpag5BoORZErhu4ttTju, HOST: 122.5.32.82, PORT: 19336} 3.下载dbeaver,连接相关库 4.用dbeaver手动创建需要的表,这里需要的表如下…

Excel甘特图

背景:领导让我在excel上填项目计划, 也就是分配未来的工时。有名称、开始时间、结束时间等。平时业务挺杂的, 其实没有办法准确的填写连贯的工时计划。需要稍微调整一下。甘特图比较直观, 但是MSProject又太大没装,还要收费。上网搜了一下还真有用wps office做的。 wps本身…