当前位置: 首页 > news >正文

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!}`)	//编译通过,输出undefined

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

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

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

let 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的值为30
    
    
    let c1 = 10
    c1 %= 4			//把c对4取余数,把结果再赋值给c,最终c=2
    console.log(`c1的值为${c1}`) //c1的值为2

相关文章:

  • glb模型压缩draco使用教程windows
  • 全方位监控AWS Application Load Balancer异常情况实战
  • LeetCodeHot100_0x02
  • 基于Grok3+NebulaGraph构建省市区乡镇街道知识图谱
  • 复杂提示工程:Chain-of-Thought vs Tree-of-Thought 范式对比
  • 可重入(Reentrant)与可重入锁(Reentrant Lock)详解
  • Unity百游修炼(2)——Brick_Breaker详细制作全流程
  • kotlin 知识点一 变量和函数
  • 蓝桥杯好题推荐--多项式输出
  • Python Flask基于时间序列预测算法的智慧交通数据可视化分析系统【附源码】
  • 【算法系列】常见排序算法:冒泡排序、选择排序与插入排序
  • Unity自定义树(Tree)
  • 城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章
  • 【无标题】网络安全公钥密码体制
  • html中的元素(2)
  • 云计算相关
  • 苍穹外卖day4套餐管理新增接口个人实现及思考过程记录
  • MaxKB+Ollama+DeepSeek1.5B部署知识库
  • DeepSeek-V3 论文总结
  • React进阶之React核心源码解析(三)
  • 做外贸网站推广/广州百度seo
  • 桓台网站开发/百度自动优化
  • 江苏建设集团招聘信息网站/网络营销有本科吗
  • 苏州网络销售公司/搜索引擎优化的方式
  • 成都在哪建设网站/org域名注册
  • 沈阳企业网站设计制作/百度竞价托管哪家好