2、鸿蒙Harmony Next开发:ArkTS语言

目录

什么是ArkTS?

ArkTS的发展趋势

ArkTS的定位及约束

ArkTS的对UI的拓展

1、UI描述

2、状态管理:

ArkTS语法基础

基本知识:声明

基本知识:类型

基本知识:空安全

基本知识:类型安全与类型推断

基本知识:语句

函数的声明和使用

类的声明和使用

模块的导入与导出

ArkTS对UI的语法支持

自定义组件的规则

组件描述的规则

组件描述

属性方法

事件方法

布局描述

渲染控制语法

if/else if/else

Foreach​编辑

LazyForeach


什么是ArkTS?

ArkTS是鸿蒙生态的应用开发语言,它提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。

同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码正确性;并实现更好的运行性能。

ArkTS的发展趋势

ArkTS的定位及约束

  • ArkTS作为OH/HMOS官方主流推荐开发语言
  • ets以及.d.ets作为ArkTS语言源码后缀
  • 与TS/JS高效互操作,兼容TS/JS生态
  • ets文件可以import ets/ts/js文件源码,但是ts/js文件不允许import ets文件源码
  • 新增SDK API(不包括NDK部分)接口需要符合ArkTS规范

左侧TypeScript代码片段演示了如何在运行时通过添加和删除某些属性来更改对象的布局。运行时支持此类特性需要大量的性能开销,ArkTS禁止使用any类型、禁止在运行时更改对象的布局。可以使用可选属性和给该属性赋值undefined的方式来替代对对象布局的动态改变。

此TypeScript代码段展示了过于灵活的特性导致行为的二义性。在class C中存在实例方法m,它应被C的所有实例所共享,也就是说C的实例调用m方法时行为应一致。在TypeScript中,可以使用对象字面的方式创建C的实例,跳过这样的约束,构造一个不符合C预期但类型是C的实例,这是不安全的行为,也会对使用者造成困惑。

ArkTS禁止使用对象字面量初始化具有方法的类,请使用new操作符创建类的实例或者将类中方法改为类的实例属性(类型为方法)。

ArkTS的对UI的拓展

1、UI描述

在TS的类型系统的基础上,做了进一步的扩展:定义了各种装饰器、自定义组件和UI描述机制,再配合UI开发框架中的UI内置组件、事件方法、属性方法等共同构成了应用开发的主体。

2、状态管理:

ArkTS在TS的类型系统的基础上,做了进一步的扩展:定义了各种装饰器、自定义组件和UI描述机制,再配合UI开发框架中的UI内置组件、事件方法、属性方法等共同构成了应用开发的主体。ArkTS的对UI的拓展UI 相关联的数据,不仅可以在组件内使用,还可以在不同组件层级间传递,比如父子组件之间,爷孙组件之间,也可以是全局范围内的传递,还可以是跨设备传递。

ArkTS语法基础

基本知识:声明

基本知识:类型

基本类型:string、number、boolean、Enum

引用类型:Array、基于Object的自定义类

联合类型:Union

类型别名:Aliases

// 基本类型:string、number、boolean、Enum
let name: string = '小明’;
let age: number = 20;
let isMale: boolean = true;console.log(name); // 输出小明
console.log(age.toString());// 输出:20
console.log(`我的名字叫${name},今年${age}岁`);enum Color {Red,Blue,Green
}let favouriteColor: Color = Color.Red;// 引用类型:Array、基类Object
let students: string[] = ['小明', '小张', '小王', '小李’];
let students: Array<string>= ['小明', '小张', '小王', '小李’];// 联合类型:Union
let luckyNum: number | string = 7;
luckyNum= ’seven';// 类型别名:Aliasestype Matrix= number[][];
type NullableObject= Object | null;

基本知识:空安全

一般来说,有时会存在声明变量类型而不明确提供初始值。在这类情况下,通常使用联合类型包含null值

1、使用该变量中需要进行判空

let name: string | null = null
console.log(name.length.toString()); //Error Message:Cannot read property length of null

2、使用空值合并表达式,??左边的值为null时会返回表达式右边的值

let name: string | null = null
const res = name ?? '';

3、使用?进行可选链,如果是null,运算符会返回undefined

let str:string | null = 'aa';
let len = str?.length;

基本知识:类型安全与类型推断

基本知识:语句

// 条件语句
let isValid: boolean;
if (Math.random() > 0.5) {isValid = true;
} else {isValid = false;
}// 条件表达式
let isValid = Math.random() > 0.5 ? true : false;// 循环语句 用于重复执行相同的一组语句,提高效率、简化代码循环语句
// for 
for (let i = 0; i < students.length; i++) {console.log(students[i]);
}// for...of
for (let student of students) {console.log(student);
}// while
let index = 0;
while (index < students.length) {console.log(students[index]);index++;
}

函数的声明和使用

类的声明和使用

模块的导入与导出

通过import导入另一个文件的变量、函数、类等

// Page.ets

import { Person } from './Person';

const person = new Person('小张', 20, true);

person.introduce();//输出:小张是个男生,年龄是28岁

ArkTS对UI的语法支持

自定义组件的规则

组件描述的规则

组件描述

属性方法

事件方法

布局描述

渲染控制语法

if/else if/else

Foreach

LazyForeach

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

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

相关文章

【Elasticsearch】function_score

如果你希望在 Elasticsearch 查询中降低某些特定 `id` 的文档评分,可以通过 `function_score` 查询结合 `script_score` 函数来实现。`script_score` 允许你使用自定义脚本对文档的评分进行调整。 以下是一个示例,展示如何降低某些特定 `id` 的文档评分: 示例场景 假设我们…

vscode打开stm32CubeIDE的项目的注释问题

文章目录 目的是为消除红色底线打开命令面板&#xff1a;CtrlShiftP 搜索并打开&#xff1a;C/C: Edit Configurations (JSON) 修改并添加。&#xff08;注意里面的版本号&#xff09; {"configurations": [{"name": "Win32","includePath&…

ESP32使用freertos更新lvgl控件内容

LVGL不是线程安全&#xff0c;所有 lv_xxx方法只能在GUI主线程调用。 freertos都是线程池&#xff0c;子线程&#xff0c;不能直接更新lvgl&#xff0c;不然看门狗被触发&#xff0c;死机。 推荐方法案例&#xff1a; 假如搜索wifi列表得到参数是wifi_options&#xff0c;需要通…

OBOO鸥柏丨满天星(MTSTAR)多媒体信息发布系统技术解析

初次启动欢迎您使用鸥柏(OBOO)满天星(MTSTAR)多媒体信息发布系统&#xff0c;在使用本系统的独立服务器模式前&#xff0c;我们需要完成设备的一些必须设置教程技术说明。其总体流程分为两步&#xff1a;录入本地服务器IP地址->连接网络您获取到的OBOO鸥柏满天星(MTSTAR)液晶…

数据结构:栈、队列、链表

目录 栈 ​队列 链表 栈 栈数据结构特点&#xff1a;先入栈的数据后出&#xff0c;此数据结构常用的方法有&#xff1a;入栈push、出栈pop、查看栈顶元素peek等&#xff0c;下方示例以数组实现栈结构。 package com.ginko.datastructure; import lombok.extern.slf4j.Slf4j…

Python-难点-uinttest

1 需求要求&#xff1a;unittest.TestCase放在列表中&#xff0c;列表存储的是脚本文件名import使用动态加载方式&#xff1a;importlib.import_module()unittest.TestLoader使用loadTestsFromModule()2 接口3 示例4 参考资料

开源 python 应用 开发(五)python opencv之目标检测

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

ABP VNext + OpenTelemetry + Jaeger:分布式追踪与调用链可视化

ABP VNext OpenTelemetry Jaeger&#xff1a;分布式追踪与调用链可视化 &#x1f680; &#x1f4da; 目录ABP VNext OpenTelemetry Jaeger&#xff1a;分布式追踪与调用链可视化 &#x1f680;背景与动机 &#x1f31f;环境与依赖 &#x1f4e6;必装 NuGet 包系统架构概览…

C语言中整数编码方式(原码、反码、补码)

在 C 语言中&#xff0c;原码、反码、补码的运算规则与其编码特性密切相关&#xff0c;核心差异体现在符号位是否参与运算、进位如何处理以及减法是否能转化为加法等方面。以下是三者的运算规则及特点分析&#xff08;以 8 位整数为例&#xff0c;符号位为最高位&#xff09;&a…

js二维数组如何变为一维数组

在 JavaScript 中&#xff0c;将二维数组转换为一维数组&#xff08;扁平化&#xff09;有多种方法&#xff0c;可根据数组结构复杂度、性能需求和兼容性选择。以下是最常用的实现方式&#xff1a; 1. 使用 flat() 方法&#xff08;ES2019&#xff09; MDN释义&#xff1a;flat…

Claude code在Windows上的配置流程

前言 昨天在服务器上配置好了 Claude code&#xff0c;发现其编码性能和效率都非常不错。 然而&#xff0c;尝试用它修改带 UI 界面的客户端程序时颇为不便&#xff0c;因为服务器没有图形化界面&#xff0c;无法直接将应用界面直接显示到开发机上&#xff0c;调试起来颇为不…

手把手教你用YOLOv10打造智能垃圾检测系统

无需编程基础&#xff01;手把手教你用YOLOv10打造智能垃圾检测系统 垃圾分类不再难&#xff0c;AI助手秒识别 你是否曾站在分类垃圾桶前犹豫不决&#xff1f;塑料瓶是可回收还是其他垃圾&#xff1f;外卖餐盒到底该丢哪里&#xff1f;随着垃圾分类政策推广&#xff0c;这样的困…

batchnorm类

1. 伪代码&#xff1a;2. python代码&#xff1a;3. 测试&#xff1a;4. 加深理解&#xff1a;以 为例&#xff0c;x3&#xff0c;可见输出的batchnorm后y0.2627.查看模型记录的均值及方差&#xff0c;计算y0.286799&#xff0c;理解是大致这样的计算过程。&#xff08;为什么数…

SpringBoot项目保证接口幂等的五种方法!

1. 幂等概述 1.1 深入理解幂等性 在计算机领域中&#xff0c;幂等&#xff08;Idempotence&#xff09;是指任意一个操作的多次执行总是能获得相同的结果&#xff0c;不会对系统状态产生额外影响。在Java后端开发中&#xff0c;幂等性的实现通常通过确保方法或服务调用的结果…

SQL新手入门详细教程和应用实例

SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。它允许你创建、查询、更新和删除数据。本教程将从基础概念开始,逐步引导你上手SQL,并提供详细的应用实例。教程基于标准SQL语法,实际使用时需根据数据库系统(如MySQL、SQLite或PostgreSQL)调整。…

DVWA-LOW级-SQL手工注入漏洞测试(MySQL数据库)+sqlmap自动化注入-小白必看(超详细)

首次使用DVWA的靶场&#xff0c;咋们先从最低级别的LOW开始&#xff0c;因为之前玩过一下墨者学院&#xff0c;对sql注入有一点认识和理解&#xff0c;所以先从sql的盲注开始&#xff1b; 1、测试注入点是否存在sql注入的漏洞&#xff1b; &#xff08;1&#xff09;首先我们…

JAVA线程池详解+学习笔记

1.线程池基础概念线程池是一种资源复用技术&#xff0c;通过预先创建并管理一组线程&#xff0c;减少频繁创建和销毁线程的开销。核心思想与数据库连接池、字符串常量池类似&#xff0c;旨在提升系统性能。核心参数解析ThreadPoolExecutor构造函数包含7个关键参数&#xff1a;c…

数据分析库 Pandas

对于Pandas的简单认识和基本操作的练习一 介绍 Pandas 是一个开源的数据分析和数据处理库&#xff0c;它是基于 Python 编程语言的库。 Pandas 提供了易于使用的数据结构和数据分析工具&#xff0c;特别适用于处理结构化数据&#xff0c;如表格型数据&#xff08;类似于 Excel …

qt 中不要让 lambda 槽函数捕获信号源对象的共享指针

错误示例std::shared_ptr<QSerialPort> serial{new QSerialPort{}};QSerialPort::connect(serial.get(),&QSerialPort::readyRead,[serial](){QByteArray receive_data serial->readAll();std::cout.write(receive_data.data(), receive_data.size());});这会直接…

Solidity 合约的编写-完整开发流程:从编译、测试、部署到交互

&#x1f9f1; Solidity 合约开发全流程&#xff08;Foundry 版&#xff09;✅ 适合对象&#xff1a;已经能写合约但不清楚如何测试、部署、交互的开发者✅ 工具链&#xff1a;Foundry&#xff08;forge, anvil, cast&#xff09;&#x1f4cc; 开发流程总览1️⃣ 初始化项目 2…