2024最新版鸿蒙纯血原生应用开发教程文档丨学习ArkTS语言-基本语法


ArkTS是HarmonyOS的主要应用开发语言,在TypeScript基础上进行了扩展,保留了其基本风格,并通过增强静态检查和分析来提高程序的稳定性和性能。本教程将帮助开发者掌握ArkTS的核心功能、语法及最佳实践,以便高效地构建高性能移动应用。

1. 基本语法

1.1. 字面量

字面量(Literal)是一种直接表示在源代码中的固定值,不同类型的字面量格式有所不同,下面是ArkTS中各类型字面量的表示方式。

  • 数值型字面量
    • 整数:数学中的整数(例如:8, 15, 123)
    • 浮点数:带有小数点的数字(例如:8.15, 1.234)
  • 字符串型字面量:用单引号或双引号括起来的文本(例如:'abc', "你好世界")
  • 布尔型字面量:表示真假(例如:true, false)
//1.整数型字面量
console.log('整数:',60);       //60//2.浮点型字面量
console.log('浮点数:',3.14)  //3.14
console.log('浮点数:',.14)   //0.14
console.log('浮点数:',1e2)   //100//3.布尔型字面量
console.log('布尔型:',true)   //true
console.log('布尔型:',false)   //false//4.字符串型字面量
console.log('字符串:','Hello ArkTS')		  //Hello ArkTS
console.log('字符串:',"Hello HarmonyOS") 	//Hello HarmonyOS

1.2. 变量

在计算机语言中,变量可以理解为存储数据的容器。在ArkTS中定义变量的格式如下

let 变量名: 类型 = 值int a = 10; 	//Java
let a:number = 10	//ArkTS

例:比如在华为商城中有很多商品,我们现在想定义一个变量,用来存储商品的标题

定义各种类型的变量

let title: string = 'HUAWEI Mate 60 Pro'
console.log(title)

1.3. 类型

ArkTS是一种静态类型的语言,定义变量时必须明确数据类型。 ArkTS支持的数据类型有以下几种

number 类型

number 用于表示数字,包括整数和浮点数。

let num: number = 10; 
let floatNum: number = 3.14;

string 类型

string 用于表示文本数据,可以包含字母、数字、符号和空格等。可以使用单引号(')、双引号(")或反引号(`)来声明字符串。反引号内可以嵌入表达式,形成模板字符串。

let name: string = 'ArkTS!'; 
let desc: string = "ArkTS是HarmonyOS的主要应用开发语言"
let templateStr: string = `Hello,${name}. ${desc}` 

boolean 类型

boolean 用于表示逻辑上的真值和假值。只有两个值:truefalse

  let isDone: boolean = false;

array 类型

array即数组,它是一个存储数据的容器,数组的长度由数组中元素的个数来确定。数组中第一个元素的索引为0。

let names: string[] = ['Alice', 'Bob', 'Carol'];
names[0] = "爱丽丝"
console.log(names[0])

enum类型

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

使用枚举常量时必须以枚举类型名称为前缀。

enum ColorSet { Red, Green, Blue 
}
let c: ColorSet = ColorSet.Red;

常量表达式可以用于显式设置枚举常量的值。

enum ColorSet { White = 0xFF, Grey = 0x7F, Black = 0x00 
}
let c: ColorSet = ColorSet.Black;

union类型

union类型,即联合类型,是由多个类型组合成的引用类型。联合类型可以包含了变量可能的所有类型

type Type = string | number | ColorSet | string[] | ColorSet[]let a1: Type = "red" //正确
let a2: Type = 0xff00 //正确
let a3: Type = ColorSet.Red //正确
let a4: Type = ["red", "balck"] //正确
let a5: Type = [ColorSet.Red] //正确
let a6: Type = true //错误

Aliases类型

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

// 为number类型取一个别名为int
type int = number
let a: number = 10
let b: int = 10

1.4. 常量

常量是不会发生改变的数据,它只能被赋值一次。定义格式如下

const 变量名: 类型 = 值

例:在数学中有一个非常重要的常量,就是圆周率π

const PI: number = 3.1415926
PI = 31.4 //这是错误的,变量的值只能被赋值一次。

1.5. 类型推断

由于ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定。但是,如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。

//以下两种定义变量的方式都可以
let a1: number = 10
let a2 = 10

1.6. 命名规范

不管定义变量还是定义常量,取名也是不是乱取的,是有一些命名规则的,必须遵守这些规则,否则代码编译不通过。

1. 只能包含数字、字母、下划线、$,不能以数字开头
2. 不能使用内置关键字或者保留字
3. 严格区分大小写

1.7. undefined 空值

先说结论,undefined表示一个变量它的值为“空值”,意思就是这个变量没有值,其它就是undefined。

有下面几种情况,变量的值是undefined.

情况一:变量没有显示的赋值,其值默认就是undefined

变量没有显示的赋值,但是直接使用这个变量是不推荐的,所以编译器会报错。为了验证上面的结论,我们可以使用强制断言符号“!”,强制编译通过。

let a: string
console.info(`${a}`)	//编译报错
console.info(`${a!}`)	//编译通过,输出undefinedlet b: number 
console.info(`${b!}`)	//编译通过,输出undefined

情况二:变量没有显示赋值,但是明确声明类型可以是undefined,其值默认也是undefined

let a: string | undefined
console.info(`${a}`)	//编译通过,输出undefinedlet b: number | undefined
console.info(`${b}`)	//编译通过,输出undefined

情况三:变量显示赋值为undefined,其类型必须声明为undefined类型

let a: string  = undefined	//编译错误
let b: string | undefined = undefined
console.info(`${a}`)	//编译通过,输出undefined

注意:不管是前面那种情况,在后续代码中都可以给值为undefined的变量赋值。

let a: string
let b: number | undefined
let c: boolean | undefined = undefined
console.info(`${a!}`)	//输出undefined
console.info(`${b}`)	//输出undefined
console.info(`${c}`)	//输出undefined
a = 'hello'
b = 20
c = true
console.info(`${a}`)	//输出hello
console.info(`${b}`)	//输出20
console.info(`${c}`)	//输出true

1.8. 数组

数组是能够存储0个或者多个数据的容器。下面两种格式都可以定义数组

let 数组名: Array<类型> = [值1, 值2, 值3];
let 数组名: 类型[] = [值1,值2,值3]

例:定义一个数组,用来存储班级中学生的姓名

let names1: Array<string> = ['小明','小黄','阿珍','阿强']
let names2: string[] = ['小明','小黄','阿珍','阿强']

例:定义数组也可以使用类型推断,省略数据类型

let names3 = ['小明','小黄','阿珍','阿强']

数组中存储的数据统称为元素,每一个元素都会有一个唯一的索引编号,通过数组名[索引]就可以找到任意一个元素。

console.log(‘names2[0]’,names2[0]) 	//小明
names2[1] = ‘大黄’	
console.log(‘names2[1]’,names2[1])	//大黄
console.log(‘names2[2]’,names2[2])	//阿珍
console.log(‘names2[3]’,names2[3])	//阿强

1.9. 运算符

运算符(Operator)是一种告诉编译器执行特定数学或逻辑操作的符号。任何一门计算机语言运算操作基本上是一样的。

1.9.1. 算术运算符

所有算术运算符如下表所示

运算符

含义

+

加法运算、字符串拼接

-

减法运算

*

乘法运算

/

除法运算,整数相除只能得到整数

%

取模(余数)

++

自增运算(在原来数据的基础上+1)

--

自减运算(在原来数据的基础上-1)

以上运算符都比较简单,下面重点讲解一下++或者--运算符的运算规则。

  • 单独使用:不断++或者--放在操作数的前面还是后面,都表示对操作数自增1或者自减1
    let x = 3
    let y = ++x	//a先+1,再把a的结果赋值给b
    console.log(`x的值为${x}`) //x的值为4
    console.log(`y的值为${y}`) //y的值为4
  • 混合使用:++和--可以放在变量前面或者后面,运算顺序有所不同
    let i = 3
    let j = i++	//先把i的值赋值给j,i再+1
    console.log(`i的值为${i}`) //x的值为4
    console.log(`j的值为${j}`) //y的值为3
  • let i = 3
    let j = i++	//先把i的值赋值给j,i再+1
    console.log(`i的值为${i}`) //x的值为4
    console.log(`j的值为${j}`) //y的值为3

  • 1.9.2. 赋值运算符

    赋值运算就是把具体数据值赋值给变量,有下面的几个运算

    运算符

    含义

    =

    把右边的值赋值给左边

    +=

    左右两边相加的结果赋值给左边

    -=

    左右两边相减的结果赋值给左边

    *=

    左右两边相乘的结果赋值给左边

    /=

    左右两边相除的结果赋值给左边

    %=

    左右两边取余数的结果赋值给左边

  • let a1 = 10	//把整数10赋值给var类型的变量a
    let b1 = 20
    b1 += 10 		//把b+10之后,把结果再赋值给b,最终b=30
    console.log(`b1的值为${b1}`) //b1的值为30let c1 = 10
    c1 %= 4			//把c对4取余数,把结果再赋值给c,最终c=2
    console.log(`c1的值为${c1}`) //c1的值为2

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

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

相关文章

【AIGC】使用Python实现科大讯飞语音服务ASR转录功能:完整指南

文章目录 讯飞ASR转写API完整指南1. 引言2. 讯飞ASR API介绍3. API参数说明3.1 认证参数3.2 上传参数3.3 查询结果参数3.4 orderResult 字段3.5 Lattice 字段3.6 json_1best 字段3.7 st 字段 4. Python代码实现4.1 生成签名4.2 上传音频文件4.3 获取转写结果4.4 解析转写结果 5…

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本&#xff1a;python 3.11.5&#xff0c;这里不再介绍&#xff0c;有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本&#xff1a;conda 23.7.4&#xff0c;这里也不再介绍&#xff0c;有需要的可以在网上找教程。 …

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows&#xff08;工作流&#xff09;与 Crews&#xff08;协作组&#xff09;一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库&#xff08;crewai、litellm&#xff09; 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…

Linux——高级IO

一、前言概念 IO拷贝等待 1. 同步&#xff08;Synchronous&#xff09; vs 异步&#xff08;Asynchronous&#xff09; 核心区别&#xff1a;关注的是消息通知的机制。 同步&#xff1a;调用方主动等待结果&#xff0c;需持续检查任务是否完成。 异步&#xff1a;调用方发起…

Linux:基础IO

文章目录 一、理解"文件"1、狭义上的理解2、广义上的理解3、文件操作的认知4、系统角度 二、C语言文件接口1、ls /proc/[进程id] -l 命令查看当前正在运⾏进程的信息2、stdin 和 stdout 和 stderr 三、系统文件 I/O1、标志位传递的一种方法2、系统调用 open 三、文件…

zabbix数据采集以及自定义监控

目录 1.数据采集 2.自定义监控 2.1客户端 2.2服务端 ​​​​​​​1.数据采集 点击最新数据页面如下图 往下滑查看具体数据 并点击查看图像就可以看到图像了 就可以看到如下图内容 2.自定义监控 我们通过zabbix客户端任何模板就可以监控我们想要的任何资源 如果…

02.25 继承和多态

编写一个如下场景&#xff1a; 有一个英雄Hero类&#xff0c;私有成员&#xff0c;攻击&#xff0c;防御&#xff0c;速度&#xff0c;生命值&#xff0c;以及所有的set get 方法 编写一个 武器 Weapon 类&#xff0c;拥有私有成员攻击力&#xff0c;以及set get 方法 编写一个…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 &#xff08;可视化的方式&#xff0c;后续会写一些&#xff09; 3. Display 功能&#xff08;显示方面的设置&#xff09; bars 柱状图方式显示 lines&#xff08;不选不会出功能&#xff09; line width 线条的粗细 staircase 会让折…

前缀和代码解析

前缀和是指数组一定范围的数的总和,常见的有两种,一维和二维,我会用两道题来分别解析 一维 DP34 【模板】前缀和 题目: 题目解析: 暴力解法 直接遍历数组,遍历到下标为 l 时,开始进行相加,直到遍历到下标为 r ,最后返回总和.这样做的时间复杂度为: O(n) public class Main …

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理&#xff08;NLP&#xff09;任务上取得了最新的最优结果&#xff08;SOTA&#xff09;。然而&#xff0c;这些模型容易受到对抗攻击的影响&#xff0c;尤其是对于表意文字语言&#xff08;如中文&#xff09;。 在本研究中&#xff0…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 文件列表生成器 - 吾爱破解 - 52pojie.cn &#xff0c;和我去年写的一个软件很像&#xff0c;当时我也是有需求&#xff0c;要把一个文件夹里及其子文件夹里所有的文件列出来&#xff0c;就临时弄了个小…

深度学习-6.用于计算机视觉的深度学习

Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…

【Linux】初始操作系统和进程(一)

目录 前言&#xff1a; 一、冯诺依曼体系结构&#xff1a; 二、操作系统&#xff1a; 1.操作系统是什么&#xff1f; 2.为什么要有操作系统&#xff1f; 3.操作系统是如何管理下层的&#xff1f; 4.操作系统是如何对上层提供服务的&#xff1f; 三、进程&#xff1a; …

【链 表】

【链表】 一级目录1. 基本概念2. 算法分析2.1 时间复杂度2.2 空间复杂度2.3 时空复杂度互换 线性表的概念线性表的举例顺序表的基本概念顺序表的基本操作1. 初始化2. 插入操作3. 删除操作4. 查找操作5. 遍历操作 顺序表的优缺点总结优点缺点 树形结构图形结构单链表基本概念链表…

python-leetcode-字符串解码

394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; class Solution:def decodeString(self, s: str) -> str:stack []num 0curr_str ""for char in s:if char.isdigit():num num * 10 int(char)elif char [:stack.append((curr_str, num))curr_str, …

力扣 下一个排列

交换位置&#xff0c;双指针&#xff0c;排序。 题目 下一个排列即在组成的排列中的下一个大的数&#xff0c;然后当这个排列为降序时即这个排列最大&#xff0c;因为大的数在前面&#xff0c;降序排列的下一个数即升序。所以&#xff0c;要是想找到当前排列的下一个排列&…

ProGuard加密混淆SpringBoot应用代码

背景 我们的项目是基于SpringCloud架构的微服务应用&#xff0c;采用Docker离线部署方式交付客户&#xff0c;通过授权证书来控制应用的许可功能模块和使用时间。我们已经在代码层已经实现&#xff1a; 基于多维度硬件指纹的绑定验证&#xff0c;cpu id、mac地址、磁盘序列、…

动态链接器(九):.init和.init_array

ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分&#xff0c;用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码&#xff0c;通常由运行时环境&#xff08;如C标准库的启动例程&#xff0…

Ollama微调

Ollama是一款开源工具&#xff0c;其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型&#xff0c;如 Llama 2、Qwen2.5等。在上一篇文章中我们部署Ollama&#xff0c;并使用简单命令管理Ollama。接下来我们学习Ollama的高级应用。通过Ollama的Mod…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…