鸿蒙开发 一 (二)、熟悉鸿蒙之剑 ArkTS

ArkTS是HarmonyOS主要应用开发语言,以后也别在弄那个 java 和鸿蒙的混合版了, 没必要浪费时间, 一步到位, 学新的吧。

简介

ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和性能

  • 强制使用静态类型:静态类型是ArkTS最重要的特性之一。如果使用静态类型,那么程序中变量的类型就是确定的

  • 禁止在运行时改变对象布局:为实现最大性能,ArkTS要求在程序执行期间不能更改对象布局。

  • 限制运算符语义:为获得更好的性能并鼓励开发者编写更清晰的代码,ArkTS限制了一些运算符的语义。比如,一元加法运算符只能作用于数字,不能用于其他类型的变量。

  • 不支持Structural typing:对Structural typing的支持需要在语言、编译器和运行时进行大量的考虑和仔细的实现,当前ArkTS不支持该特性。

ArkTS主要扩展了如下能力:

  • 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力

  • 状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递

  • 渲染控制:ArkTS提供了渲染控制的能力

ArkTS 基础知识

------------------编程语法, 我们从小往大了学---------------------

数据类型

Number类型 :number 任何整数和浮点数都可以被赋给此类型的变量

Boolean类型:boolean类型由true和false两个逻辑值组成

String类型:string代表字符序列;可以使用转义字符来表示字符

Void类型:void类型用于指定函数没有返回值

Object类型:Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量

Array类型:array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象

let names: string[] = ['Alice', 'Bob', 'Carol'];

Enum类型:enum类型,又称枚举类型,是预先定义的一组命名值的值类型,其中命名值又称为枚举常量

Union类型:union类型,即联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型, 这个类型很神奇, 开发 Android 的没有见过😄

class Cat {// ...
}
class Dog {// ...
}
class Frog {// ...
}
type Animal = Cat | Dog | Frog | number
// Cat、Dog、Frog是一些类型(类或接口)let animal: Animal = new Cat();
animal = new Frog();
animal = 42;
// 可以将类型为联合类型的变量赋值为任何组成类型的有效值

Aliases类型:Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称

变量声明

学完基本数据类型, 可以学习怎么声明一个变量了,var 在 ArkTS 中是不支持的, 记得

let hi: string = 'hello';
hi = 'hello, world';
const hello: string = 'hello';//常量

基本运算符

+,-,*,/,%

 &,| ,!,^,<<,>>,>>>(逻辑右移:将a的二进制表示向右移b位,左边补0)

=,

+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=,

==,!=,>,>=,<,<=

跟 java 差不多

语句

if else

//注意:条件表达式可以是任何类型。但是对于boolean以外的类型,会进行隐式类型转换
let s1 = 'Hello';
if (s1) {console.log(s1); // 打印“Hello”
}let s2 = 'World';
if (s2.length != 0) {console.log(s2); // 打印“World”
}

Switch case

condition ? expression1 : expression2 (条件表达式)

for循环

for ([init]; [condition]; [update]) {statements
}

For-of语句,可遍历数组或字符串

for (forVar of expression) {statements
}

While 循环

Do-while语句

Break语句

continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代

try-catch-finally

try {// 可能发生异常的语句块
} catch (e) {// 异常处理
}

函数

函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体

//例1:可选参数的格式可为name?: Type
function hello(name?: string) {if (name == undefined) {console.log('Hello!');} else {console.log(`Hello, ${name}!`);}
}

Rest 参数, 函数的最后一个参数可以是rest参数。使用rest参数时,允许函数或方法接受任意数量的实参

function sum(...numbers: number[]): number {let res = 0;for (let n of numbers)res += n;return res;
}sum() // 返回0
sum(1, 2, 3) // 返回6

函数的作用域:函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问

箭头函数:函数可以定义为箭头函数,箭头函数的返回类型可以省略;省略时,返回类型通过函数体推断

let sum = (x: number, y: number): number => {return x + y;
}

闭包:是由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量,太难, 看不懂, 以后不用它算了

function f(): () => number {let count = 0;let g = (): number => { count++; return count; };return g;
}let z = f();
z(); // 返回:1
z(); // 返回:2

重载:指定函数的不同调用方式,为同一个函数写入多个同名但签名不同的函数头

函数完了, 继续更大一点的, 类,类声明引入一个新类型,并定义其字段、方法和构造函数

class Person {name: string = ''surname: string = ''constructor (n: string, sn: string) {this.name = n;this.surname = sn;}fullName(): string {return this.name + ' ' + this.surname;}
}

调用: 比 java 多一个方式

let p = new Person('John', 'Smith');
let p: Point = {x: 42, y: 42}; //js 方式,都是 json

static:将字段声明为静态,静态字段属于类本身,类的所有实例共享一个静态字段

字段初始化:ArkTS要求所有字段在声明时或者构造函数中显式初始化

setter和getter:可用于提供对对象属性的受控访问

class Person {name: string = ''private _age: number = 0get age(): number { return this._age; }set age(x: number) {if (x < 0) {throw Error('Invalid age argument');}this._age = x;}
}let p = new Person();
p.age; // 输出0
p.age = -42; // 设置无效age值会抛出错误

空安全

默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空

空值合并运算符

空值合并二元运算符 ?? 用于检查左侧表达式的求值是否等于null或者undefined,如果是,则表达式的结果为右侧表达式 : “ a ?? b”

模块

每个模块都有其自己的作用域,即,在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见,除非它们被显式导出

导出

注意:通过export方式导出,在导入时要加{}

export class Point {x: number = 0y: number = 0constructor(x: number, y: number) {this.x = x;this.y = y;}
}
export let Origin = new Point(0, 0);
export 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));
}
导入
import UIAbility from '@ohos.app.ability.UIAbility';
动态导入

import()语法通常称为动态导入dynamic import,是一种类似函数的表达式,用来动态导入模块

let modulePath = prompt("Which module to load?");
import(modulePath)
.then(obj => <module object>)
.catch(err => <loading error, e.g. if no such module>)
程序入口

main 函数

 

注意:从TypeScript到ArkTS的适配规则,参考:从TypeScript到ArkTS的适配规则

就到这里,可以写一些简单的算法了

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

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

相关文章

网络工程师(强化训练)-网络互联与互联网

网络工程师 以下关于OSPF路由协议的描述中&#xff0c;错误的是向整个网络中每一个路由器发送链路代价信息。相比于TCP&#xff0c;UDP的优势为开销较小。以太网可以传送最大的TCP段为1480字节。IP数据报经过MTU较小的网络时需要分片。假设一个大小为1500字节的报文分为2个较小…

【如何应用OpenCV对图像进行二值化】

使用OpenCV进行图像二值化是一个常见的图像处理任务。以下是一个简单的步骤说明&#xff0c;以及相应的Python代码示例。 步骤说明&#xff1a; 读取图像&#xff1a;首先&#xff0c;使用OpenCV的imread函数读取图像。灰度化&#xff1a;将彩色图像转换为灰度图像&#xff0…

LeetCode 1702.修改后的最大二进制字符串:脑筋急转弯(构造,贪心)

【LetMeFly】1702.修改后的最大二进制字符串&#xff1a;脑筋急转弯&#xff08;构造&#xff0c;贪心&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-binary-string-after-change/ 给你一个二进制字符串 binary &#xff0c;它仅有 0 或者 1 组…

Day 20 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉…

【鸿蒙千帆起】《开心消消乐》完成鸿蒙原生应用开发,创新多端联动用户体验

《开心消消乐》已经完成鸿蒙原生应用开发&#xff0c;乐元素成为率先完成鸿蒙原生应用开发的20游戏厂商之一。作为一款经典游戏&#xff0c;《开心消消乐》已经拥有8亿玩家&#xff0c;加入鸿蒙原生应用生态&#xff0c;将为其带来更优的游戏性能和更多创新体验。自9月25日华为…

中国500米分辨率月最大EVI数据集

增强型植被指数&#xff08;EVI&#xff09;是在归一化植被指数&#xff08;NDVI&#xff09;改善出来的&#xff0c;根据大气校正所包含的影像因子大气分子、气溶胶、薄云、水汽和臭氧等因素进行全面的大气校正&#xff0c;EVI大气校正分三步&#xff0c;第一步是去云处理。第…

结构体和结构体指针的区别

1.定义区别 结构体的定义如下&#xff1a; struct 结构体名 {数据类型 成员变量名1;数据类型 成员变量名2;// 可以有更多的成员变量 };例如&#xff0c;定义一个表示学生的结构体&#xff1a; struct Student {int id;char name[20];int age; };上述定义了一个名为Student的…

Glide系列-自定义ModuleLoader

在当今快速发展的移动应用领域&#xff0c;图片的高效加载和显示对于提供流畅用户体验至关重要。Glide作为一款强大的图片加载库&#xff0c;已经成为Android开发者的首选工具之一。但是&#xff0c;你有没有遇到过Glide默认不支持的模型类型&#xff0c;或者需要对图片加载过程…

【SQL Sever】3. 用户管理 / 权限管理

1. 创建登录名/用户/角色 在SQL Server中&#xff0c;创建用户通常涉及几个步骤。 首先&#xff0c;你需要创建一个登录名&#xff0c;然后你可以基于这个登录名在数据库中创建一个用户。 以下是如何做到这一点的步骤和相应的SQL语句&#xff1a; 创建登录名 首先&#xff0c…

什么是尾调用优化

尾调用优化&#xff08;Tail Call Optimization&#xff0c;TCO&#xff09;是一种编译器或解释器的优化技术&#xff0c;旨在减少函数调用的内存消耗。尾调用发生在一个函数的最后一个操作是调用另一个函数时。在这种情况下&#xff0c;如果编译器能够优化&#xff0c;它可以将…

Centos离线安装ansible

Centos离线安装ansible 1、首先是互联网环境&#xff0c;安装python&#xff0c;创建虚拟环境&#xff0c;更新pip和setuptools python3 -m venv venv_2 # 此处 venv_2 也是自定义的虚拟环境名字 退出虚拟环境deactivate 进入虚拟环境source ~/ansible/bin/activate pip i…

Python零基础从小白打怪升级中~~~~~~~文件和文件夹的操作 (1)

第七节&#xff1a;文件和文件夹的操作 一、IO流&#xff08;Stream&#xff09; 通过“流”的形式允许计算机程序使用相同的方式来访问不同的输入/输出源。stream是从起源&#xff08;source&#xff09;到接收的&#xff08;sink&#xff09;的有序数据。我们这里把输入/输…

Vue3中ref,setup辨析

setup参考&#xff1a;vue3-setup-基本使用_vue3 setup mounted-CSDN博客 Vue3中的ref是一个函数&#xff0c;用于在setup函数中创建一个响应式的变量。ref函数接受一个初始值&#xff0c;返回一个响应式的对象。在setup函数中可以通过ref函数创建响应式变量&#xff0c;并将其…

企业鸿蒙原生应用元服务备案实操基本材料要求

一、要提前准备的主要材料包括 域名&#xff0c;服务器&#xff0c;包名&#xff0c;公钥&#xff0c;MD5值&#xff0c;法人身份证正反两面&#xff0c;邮箱&#xff0c;手机号2个。 域名是备案过的&#xff0c;应为要求域名能打开&#xff0c;还要悬挂备案号。 操作时要提前沟…

目标检测——瓶装白酒疵品检测数据集

一、重要性及意义 瓶装白酒疵品检测在白酒生产过程中具有极其重要的地位&#xff0c;其重要性和意义主要体现在以下几个方面&#xff1a; 首先&#xff0c;瓶装白酒疵品检测是保障消费者权益的关键环节。白酒作为消费者日常饮用的酒类之一&#xff0c;其品质直接关系到消费者…

【电控笔记4】拉普拉斯-传递函数-pid

数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质 pid分析 p控制&#xff0c;存在稳态误差 可以求出p的取值范围p>-1&#xff0c;否则发散 pi消除稳态误差 把kp换成Gs 只用pi控制&#xff0c;不加微分的原因&#xff1a; 微分之后&#xff0c;噪声增大高频噪声频率…

Linux上的chmod命令

chmod 是一个常用的Unix和类Unix操作系统命令&#xff0c;用于修改文件或目录的权限。chmod 命令允许系统管理员或文件所有者定义文件或目录的访问权限&#xff0c;包括读取、写入和执行权限。这对于确保文件的安全性和保护用户数据非常重要。 chmod命令的基本语法 chmod [op…

【研发管理】产品经理知识体系-数字化战略

导读: 数字化战略对于企业的长期发展具有重要意义。实施数字化战略需要企业从多个方面进行数字化转型和优化&#xff0c;以提高效率和创新能力&#xff0c;并实现长期竞争力和增长。 目录 1、定义 2、数字化战略必要性 3、数字战略框架 4、数字化转型对产品和服务设计的影响…

卷积通用模型的剪枝、蒸馏---剪枝篇(此处以deeplabv3+为例,可根据模型自行定制剪枝层)

之后的两篇文章是对前段时间工作的一个总结。 一、环境配置 1.1、文章以b导的代码为模板,环境配置比较简单(第二篇蒸馏篇结束后会放置剪枝蒸馏配置好的百度网盘链接),其他算法自行配置,在剪枝之前,需要保证算法能够在本地跑通。 B导链接: https://github.com/bubbliiiin…

90天玩转Python—12—基础知识篇:Python自动化操作Email:发送邮件、收邮件与邮箱客户端操作全解析

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…