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

2024-04-11 14:44

本文主要是介绍鸿蒙开发 一 (二)、熟悉鸿蒙之剑 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的适配规则

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

这篇关于鸿蒙开发 一 (二)、熟悉鸿蒙之剑 ArkTS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894373

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex