鸿蒙OS应用开发之数据类型

news2024/11/29 20:35:16

前面学习了一个简单的例子,这是多年来学习应用程序开发的经典路径,在这里也是这种待遇,通过这样的学习明白了一个简单应用是怎么样构成的,知道它是怎么运行输出的。在这个基础之上,你还是不会开发应用程序的,因为你还没有学习鸿蒙应用的开发语言基础,所以在这里要学习一下ArkTS语言的基础知识,才能自己写出应用程序来。需要自己不断运用上面的例子来测试自己学习的语言知识,然后才可以写出高端大气上档次的应用。ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。

数据类型是构成程序的基本要素,因此每一门语言都有自己的数据类型定义,并且符合这种规则的数据类型才能识别出来。

先来看一下ArkTS命名规则:

1)变量名称可以包含数字和字母。

2)变量名不能以数字开头。

3)除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。

4)不能使用关键字和保留字(已经定义了特殊含义的单词)

5)见名知意

程序都需要开发人员来定义一个名称,用来保存数据,其实就相当于声明一段内存用于储存数据。我们知道计算都需要有内存,内存很大,在程序运行时需要指定放在某个位置,所以就要声明变量。

定义名称可以包含数字和字母,比如下面这些都是合法:

这里先定义了一个函数,这个函数是在自定义组件内部,这样方便我们测试所学习的内容,比如后学习的数据类型。在函数内编写自己学习最新的知识,在上面定义了三个变量,这三个变量都是没有关键字在前面声明,跟js不一样的地方,这点要牢记。第一个变量msg是声明一个字符串变量,它采用关键字var来声明,在这里省略了字符串的类型string,完整的类型应该是这样:

var msg: string = '测试';

如果这个变量类型有初值,就可以采用省略的方式,如果没有初值就不能省略它,一定要写完整。

第二个变量msg1是声明一个数字类型,也即是number类型。这类型可以表示整数和浮点数。

第三个变量msg_1也是声明一个数字类型,但是它采用let关键字来声明。其实let与var关键字还是会有一些区别,这里暂时先不管,后面再来理解这种的区别。

比如下面的变量声明就是错误的:

第一个变量的错误原因是因为使用数字开头;第二个变量错误是使用&这样特殊字符开头;第三个变量是使用关键字var作为变量名称,关键字是保留作为语言特殊作用的,不声明为变量使用。

上面学习了变量命名规则。这些内容是要非常熟悉的,必须多学习和记忆。

接着下来我们需要学习ArkTS数据类型,首先来学习字符串类型(string)。

String类型

string代表字符序列;可以使用转义字符来表示字符。

字符串字面量由单引号(‘)或双引号(’)之间括起来的零个或多个字符组成。字符串字面量还有一特殊形式,是用反向单引号(`)括起来的模板字面量。

比如前面已经接触过的语句:

  @State message: string = 'Hello World'

这里就是声明一个组件里的属性message,@State是一个装饰器,用来告诉UI这个变量改变时,就需要更新UI界面。属性变量message定义为一个string类型,它保存的内容是 'Hello World',这个字符串是使用单引号来声明的。其实也可以使用双引号来声明字符串。

变量声明的格式如下:

这种形式是局部变量的声明,第一个是关键let,变量名称叫做msg, 变量类型是string,赋值符号为等号,后面赋值内容。

如果声明在对象内部的属性,就不能添加let关键字在前面,比如前面的属性message,它是属于struct Index组件。

下面就是一些字符串类型的定义:

Number类型

ArkTS提供number和Number类型,任何整数和浮点数都可以被赋给此类型的变量。

数字字面量包括整数字面量和十进制浮点数字面量。

整数字面量包括以下类别:

由数字序列组成的十进制整数。例如:0、117、-345

以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7

以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777

以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11

浮点字面量包括以下:

十进制整数,可为有符号数(即,前缀为“+”或“-”);

小数点(“.”)

小数部分(由十进制数字字符串表示)

以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。

下面就是一些数字类型的例子:

又比如在函数中的声明:

function factorial(n: number): number {

  if (n <= 1) {

    return 1

  }

  return n * factorial(n - 1)

}

上面函数定义的函数参数n就是一个number类型。

// 数值类型

let num1: number = 18 //十进制

let num2: number = 0b10011 //ob 二进制

let num3: number = 0o1234567 // 0o 八进制

let num4: number = 0x123abcdef //0x 十六进制

这些也是数字类型的定义。

boolean布尔值

ArkTS中可以使用boolean来表示这个变量是布尔值,可以赋值为true或者false。

// 布尔类型 true false

let stateOn: boolean = true

let stateOff: boolean = false

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

通常在条件语句中使用boolean类型的变量:

let isDone: boolean = false

// ...

if (isDone) {

  console.log ('Done!')

}

这里定义的isDone就是一个布尔变量。

数组

有两种表示方式:第一种在元素后面添加[]; 第二种方式,使用数组泛型,Array<元素类型>。

let list1 :number[] = [1,3,5];

let list2 :Array<number> = [1,3,5];

// 数组

let course1: Array<string> = ['入门',"基础语法",`组件`]

let course2: string[] = ['动画',"网络",`存储`]

array,即数组,是由可赋值给数组声明中指定的元素类型的数据组成的对象。 数组可由数组复合字面量(即用方括号括起来的零个或多个表达式的列表,其中每个表达式为数组中的一个元素)来赋值。数组的长度由数组中元素的个数来确定。数组中第一个元素的索引为0。

元组

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为 string和number类型的元组。

let x: [string, number];

x = ['hello', 10]; // OK

x = [10, 'hello']; // Error

@State x: [string, number] = ["hello", 123];

联合类型

联合类型(Union Types)表示取值可以为多种类型中的一种。

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

    let unionType: string | number |boolean

    unionType = 'seven'

    unionType = 7

    unionType = true

比如下面的例子:

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

// 可以将类型为联合类型的变量赋值为任何组成类型的有效值

任意类型(any)

存在一些情况,在编程阶段我们并不能给编译器一个明确的数据类型。那么我们可以使用any来表示数据类型。就比如any在一个杂糅着多种数据类型的数组里就十分好用。

  // 动态类型,ans

  @State ns1: any[] = [false,12, "你好", [123,2,3] ];

  build() {

    Row() {

      Column() {

        ForEach(this.ns1, (item, i) => {

          Text(`${i} - ${typeof item}  -  ${item}`)

        });

      }.width('100%')

    }.height('100%')

  }

又如下面的例子:

//any:不确定类型 可以是任意类型

let a:any = 'hello'

a=20

对象类型

在ArkTs中,不管你是一个普通的对象,还是一个数组,元组,集合等等,都是一个对象类型。

//object:对象

let o = {name:'zs',age:12}

console.log(o.name)

console.log(o['name'])

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

枚举

enum类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。

enum Color { Red, Green, Blue }

let c: Color = Color.Red

Unknown

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。那么我们可以使用unknown类型来标记这些变量。(同any)

let notSure: unknown = 4;

notSure = 'maybe a string instead';

notSure = false;

let unknownValue: unknown = 'hello';

let strValue: string = unknownValue; // 报错

Void

当一个函数没有返回值时,你通常会见到其返回值类型是 void。

function test(): void {

   console.log('This is function is void');

}

void类型用于指定函数没有返回值。 此类型只有一个值,同样是void。由于void是引用类型,因此它可以用于泛型类型参数。

class Class<T> {

  //...

}

let instance: Class <void>

Null 和 Undefined

TypeScript里,undefined和null两者各自有自己的类型分别叫做undefined和null。

let u: undefined = undefined;

let n: null = null;

null类型与undefined类型有许多相似之处

null类型只能被赋值null

undefined类型只能被赋值undefined

  // Null 和 Undefined

  @State n: null = null;

  @State u: undefined = undefined;

上面就是ArkTS的基本数据类型,这些都是必须要学会的内容,如果对这些不熟悉是无法编写程序的。

在Typescript中,可以使用let、const和var关键字声明变量。其中,let和const是ES6新增的关键字,var是ES5中的关键字。

let关键字

let关键字用于声明块级作用域的变量。例如:

if (true) {

  let x = 10;

}

console.log(x); // 报错,x未定义

const关键字

const关键字用于声明常量,一旦赋值就不能再修改。例如:

const PI = 3.14;

PI = 3; // 报错,常量不能修改

var关键字

var关键字用于声明全局作用域或函数作用域的变量。例如:

function test() {

  var x = 10;

}

console.log(x); // 报错,x未定义

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

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

相关文章

RabbitMQ学习二

RabbitMQ学习二 发送者的可靠性生产者连接重试机制生产者确认机制开启生产者确认定义ReturnCallback定义confirmCallback MQ的可靠性交换机和队列持久化消息持久化LazyQueue控制台配置Lazy模式代码配置Lazy模式 消费者的可靠性失败重试机制失败处理策略业务幂等性唯一消息ID业务…

在Deepin中安装x11vnc工具并结合内网穿透软件实现远程访问桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具&#xff0c;它的原理是通过X Window系统的协议来实现远程桌面的展…

Tair(3):Tair入门demo

新建一个maven项目 1 导入依赖 <dependency><groupId>com.taobao.tair</groupId><artifactId>tair-client</artifactId><version>2.3.5</version></dependency><dependency><groupId>com.alibaba</groupId>…

智能优化算法应用:基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.厨师算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

项目管理工具在电商新品运营中的应用与实践

运营永远是电商的核心命题&#xff0c;新品开发完成后&#xff0c;就进入了新品的运营工作&#xff0c;包括上架前的准备、上架后的推广、商品定位等&#xff0c;且运营一般同时负责多个新品的运营&#xff0c;任务多、时间紧、信息分散&#xff0c;如果缺乏统一管理入口&#…

电脑中环境变量的设置方法

环境变量是在操作系统中一个具有特定名字的对象&#xff0c;它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量&#xff0c;当要求系统运行一个程序而没有告诉它程序所在的完整路径时&#xff0c;系统除了在当前目录下面寻找此程序外&a…

Mysql- 流程函数-(If, CASE WHEN)的使用及练习

目录 4.1 If函数语法格式 4.2 CASE WHEN 条件表达式格式 4.3 update与 case when 4.4 练习题1 4.5 练习题2 4.6 练习题3-行转列 4.7 牛客练习题 4.8 LeetCode练习题 4.1 If函数语法格式 IF(expr1,expr2,expr3) 解释&#xff1a; 如果表达式expr1true(expr1 <>…

java服务调用mysql报错

一、前言 前端服务调用后端服务时出现以下报错&#xff0c;原因是使用mysql5.7版本数据库中存在ONLY_FULL_GROUP_BY这个配置项导致的不兼容 MySQLSyntaxErrorException: Expression #32 of SELECT list is not in GROUP BY clause and contains nonaggregated column demeter…

系列九、SpringBoot + MyBatis + Redis实现分布式缓存

一、缓存介绍 1.1、概述 缓存是计算机内存中的一段数据&#xff08;PS&#xff1a;内存中的数据具有读写快、断电立即消失的特点&#xff09;&#xff0c;合理地使用缓存能够提高网站的吞吐量和运行效率&#xff0c;减轻数据库的访问压力。那么哪些数据适合缓存呢&#xff1f;…

C++笔记之通过静态类成员变量的方式在不同的类之间传递参数

C笔记之通过静态类成员变量的方式在不同的类之间传递参数 code review! 在C中&#xff0c;可以使用静态类成员变量作为一种在不同类之间传递参数的方式。静态类成员变量是类的所有对象之间共享的变量&#xff0c;它们存在于类的内部&#xff0c;但不属于任何特定的类对象。 …

qt:QMessageBox的常见用法

头文件&#xff1a;#include <QMessageBox> Infomation消息对话框 初始化格式&#xff1a; QMessageBox * msgBox new QMessageBox(QMessageBox::Information, "我是标题", "我是提示文字", 按钮); 按钮可以是以下取值&#xff0c;会在按键上显示…

Python开发运维:Python调用K8S API实现资源管理

目录 一、实验 1.Python操作K8S API获取资源 2.Python操作K8S API创建deployment资源 3.Python操作K8S API删除k8s资源 4.Python操作K8S API修改k8s资源 5.Python操作K8S API查看k8s资源 二、问题 1.Windows11安装kubernetes报错 2.Python通过调用哪些方法实现Pod和De…

变容二极管测量

测量变量二极管一般有两种方法&#xff1a;一是搭建偏置电路&#xff0c;用LCR电桥测量电容&#xff1b;二是搭建一个VCO&#xff0c;通过测量频率&#xff0c;简接测量变容二极管的电容值。 正好手里有许老师LCR&#xff0c;搭建一个简单的测试电路即可&#xff0c;电路图如下…

复旦量化多策略公开课总结

《掘金之心公众号&#xff1a;gnu_isnot_unix》前Citadel现自营交易与量化管理&#xff0c;分享热点&#xff0c;主观&#xff0c;量化交易内容。活在当下&#xff0c;终身学习 - 给在职却对未来始终迷茫的人的公众号。借此想告诉不断努力&#xff0c;对生活充满热情的读者们&a…

基于ssm在线云音乐系统的设计与实现论文

摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经常会用到的就是在线云音乐系统…

洛谷P1450 硬币购物

传送门&#xff1a; P1450 [HAOI2008] 硬币购物 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1450 题干&#xff1a; 题目描述 共有 4 种硬币。面值分别为 c1​,c2​,c3​,c4​。 某人去商店买东西&#xff0c;去了 n 次&#xff0c;对于…

【Angular开发】Angular在2023年之前不是很好

做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构师酒馆】…

eclipse中maven的配置

Maven下载地址&#xff1a;https://maven.apache.org/download.cgi 下载完成以后解压到非中文目录&#xff0c;建议放一个比较大的盘符下&#xff0c;因为Maven会一直从网上更新各种库存放在这个目录下&#xff0c;慢慢的会变得很大。 Maven环境变量配置 创建环境变量 在桌…

Diary22-全网最全的CSS3.0讲解

CSS学习 1.认识CSS 1.1什么是CSS CSS&#xff1a;Cascading Style Sheet——层叠级联样式表 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff1b;颜色&#xff1b;边距&#xff1b;高度&#xff1b;宽度&#xff1b;背景图片&#xff1b;网页定位&…

再见了Future,图解JDK21虚拟线程的结构化并发

Java为我们提供了许多启动线程和管理线程的方法。在本文中&#xff0c;我们将介绍一些在Java中进行并发编程的选项。我们将介绍结构化并发的概念&#xff0c;然后讨论Java 21中一组预览类——它使将任务拆分为子任务、收集结果并对其进行操作变得非常容易&#xff0c;而且不会不…