当前位置:首页>鸿蒙APP>【鸿蒙应用开发】ArkTS变量与数据类型的定义与使用

【鸿蒙应用开发】ArkTS变量与数据类型的定义与使用

  • 2026-09-05 03:25:34
【鸿蒙应用开发】ArkTS变量与数据类型的定义与使用

鸿蒙应用开发赛项旨在全面考察参赛者在鸿蒙生态系统下的应用开发综合能力与工程实践水平。本赛项聚焦鸿蒙原生应用开发,要求选手在真实的鸿蒙开发环境中,深入理解应用需求,灵活运用ArkTS语言、ArkUI框架及鸿蒙系统开放能力,独立完成从应用开发、调试到打包的全流程,重点考察其在真实开发场景下解决复杂问题的工程实践能力。

  • 参赛对象:具有正式全日制学籍并且符合相关科目报名要求的研究生、本科及高职高专学生(以报名时状态为准)。

  • 报名时间截止时间

    • 2026年3月11日14:00

  • 比赛时间

    • 省赛:2026年4月25日

    • 全国总决赛:2026年6月

ArkTS变量与数据类型

定义与使用

为了帮助同学们更好地理解赛项要求、提前进入鸿蒙应用开发的学习状态,今天,小蓝将带大家正式开启 ArkTS 编程的入门之旅。第一站,我们从最基础、也最核心的知识点入手——变量与数据类型。

接下来,我们将从「是什么、为什么、怎么用」三个维度,循序渐进地拆解这一知识点,帮助大家打好 ArkTS 编程基础,为后续的赛项备赛与实战开发做好准备。

01

是什么(变量与数据类型的本质)

先问大家一个灵魂问题:你平时买了零食会放哪儿?肯定是放书包、抽屉或者零食罐里吧?编程里的“变量”,就相当于咱们的“零食罐”——它是一个用来存放数据的“容器”,而且这个容器有自己的“名字”(变量名),方便咱们后续找到并使用里面的数据。

那“数据类型”又是什么呢?你想想,零食罐里可能放薯片(固体)、可乐(液体)、巧克力(半固体),不同零食需要不同的罐子装(比如可乐不能用纸罐)。数据类型就相当于“零食罐的标签”,告诉程序这个容器里装的是哪种类型的数据,程序才能正确处理它。

1

变量:带名字的“数据容器”

核心定义:变量是程序中用于存储数据的内存空间的抽象,通过“变量名”来标识和访问。

举个通俗的例子:比如你在代码里写“let score = 95;”,这里的“score”就是变量名,相当于给一个能装数字的“罐子”起了个名字叫“分数”,里面装的95就是数据。后续你想知道这个分数,直接叫“score”就行,不用再记95这个数字。

2

常见数据类型:ArkTs的“数据标签”

ArkTs作为TypeScript的子集,数据类型和TS基本一致,咱们重点讲竞赛中最常用的几种,不用记太冷门的:

number(数字类型):所有整数、小数的“专属标签”,比如竞赛题里的得分(95)、循环次数(100)、圆周率(3.14)都属于这个类型。

string(字符串类型):文本内容的“标签”,只要是用单引号(')或双引号(")括起来的内容都算,比如竞赛题里的用户名("zhangsan")、题目描述("请计算两数之和")。

boolean(布尔类型):只有两个值的“极简标签”——true(真/是)和false(假/否),比如判断是否通关(true)、是否超时(false),竞赛里做条件判断时经常用。

undefined(未定义类型):变量声明了但没装数据,相当于“空罐子”,程序会默认给它贴这个标签,竞赛中要尽量避免用这种状态的变量,容易出错。

array(数组类型):用于存储多个同一类型数据的“集合标签”,相当于“多层零食盒”,每个格子装同一种类的零食。比如竞赛题里存储多个选手的得分([85, 92, 78])、多个题目编号([1, 2, 3, 4]),数组里的每个数据通过索引(从0开始)访问。

object(对象类型):用于存储一组相关数据和功能的“复合标签”,相当于“带分类格的收纳盒”,每个格子有专属名称(属性名)。比如竞赛题里存储一个选手的完整信息({name: "小明", score: 95, isPass: true}),通过“对象名.属性名”的方式访问具体数据。

02

为什么

(为啥非要定义变量和数据类型?)

有小伙伴可能会想:“我直接用数据不行吗?比如计算1+2,直接写1+2就行,为啥还要搞个变量存起来?” 问得好!咱们从“竞赛实战角度”说说这两个东西的必要性,总结下来就3个核心原因:

1

数据可复用,避免重复劳动

比如计算1到100的和”,如果不用变量,你得写1+2+3+...+100,累不累?而且后续想改成计算1到200的和,又得重新写一遍。用变量就简单了:

let start = 1; let end = 100; 后续改end=200就行,一次定义,多次使用,效率直接拉满。

2

程序不“懵圈”,减少错误

计算机本身很“死板”,你不告诉它数据类型,它可能会认错数据。比如你想让程序计算“5+3”(数字相加),结果不小心写成了"5"+"3"(字符串拼接),如果没有数据类型约束,程序会输出"53"而不是8——这在竞赛中可是致命错误!定义数据类型后,程序会提前检查,避免这种“张冠李戴”的问题。

3

节省内存,提升程序效率

蓝桥杯竞赛对程序运行效率有要求,而不同数据类型占用的内存空间不一样(比如number占8个字节,boolean只占1个字节)。明确数据类型后,计算机能精准分配内存,不会造成浪费,程序运行起来更快——相当于给程序“减负”,让它在规定时间内跑完题目。

03

怎么用(实战操作指南)

这部分是核心,必须动手练!

咱们分“变量定义”和“数据类型使用”两步走,结合竞赛常见场景讲,每个知识点都配代码示例,直接抄过去就能跑。

1

变量定义:3个关键字搞定

(let/const/var)

ArkTs里定义变量主要用let和const,var因为存在一些“坑”(比如变量提升混乱),竞赛中基本不用,咱们重点记前两个。

核心语法:关键字 变量名: 数据类型 = 初始值;

01

let:

可修改的变量(“可反复装零食的罐子”)

// 示例1:

定义一个数字类型的变量sum,初始值0,后续可以修改 

let sum: number = 0;

sum = 10; // 正确:重新赋值为10 

sum = "abc"; // 错误:数据类型不匹配,程序会报错(竞赛中要避免这种错误) 

 // 示例2:

定义一个字符串类型的变量username,初始值空字符串 

let username: string = ""; 

username = "蓝桥小能手"; // 正确

02

const:

不可修改的常量(“一次性密封的零食罐”)

适用场景:数据固定不变的情况,比如竞赛题里的固定常量(圆周率π、题目给定的边界值)。

⚠️ 注意:const定义的变量必须初始化,而且后续不能重新赋值,否则会报错。

// 示例1:定义圆周率π(固定值,不会变)

const PI: number = 3.1415926; 

// PI = 3.14; // 错误:const变量不能修改 

// 示例2:定义题目中的最大范围值 

const MAX_N: number = 1000; // 正确,后续用MAX_N代替1000,代码更易读

03

变量命名规范

变量名起得规范,代码可读性更高,评委看题时也能快速理解你的思路,而且能避免语法错误。记住3个核心规则:

只能由字母、数字、下划线(_)和美元符号($)组成,不能以数字开头(比如123score是错误的)。

不能用ArkTs的关键字(比如let、const、number、string这些,相当于“禁用词”)。

推荐用“小驼峰命名法”:第一个单词首字母小写,后面单词首字母大写(比如sumScore、userName,竞赛中最常用)。

2

数据类型实战:

常见类型的使用场景

咱们结合竞赛真题中最常考的场景,讲清楚每种类型的用法和注意事项。

01

number类型:数值计算的核心

竞赛中几乎所有计算题都要用number类型,支持加减乘除、取模(%)等运算。

// 示例1:

定义一个数字类型的变量sum,初始值0,后续可以修改 

// 示例:计算1到10的和(蓝桥杯入门题常见场景) 

let sum: number = 0; 

for (let i: number = 1; i <= 10; i++) {  

sum += i; // 等价于sum = sum + i 

} 

console.log(sum); // 输出55,正确

02

string类型:文本处理相关

竞赛中常考字符串拼接、字符串长度计算等,注意字符串拼接用+号。

// 示例1:字符串拼接(比如输出竞赛排名)

let rank: number = 1; 

let name: string = "小明"; 

let result: string = name + "的竞赛排名是第" + rank + "名"; 

console.log(result); // 输出:小明的竞赛排名是第1名 

 // 示例2:获取字符串长度(竞赛中判断输入合法性常用) 

let input: string = "蓝桥杯2026";

console.log(input.length); // 输出6(“蓝桥杯”3个汉字+“2026”4个数字?不,汉字也是1个字符,总共6个)

03

boolean类型:条件判断的“开关”

竞赛中if判断、循环条件、逻辑运算(与或非)都离不开boolean类型。

// 示例:判断是否通过竞赛(得分≥60为通过) 

let score: number = 75; 

let isPass: boolean = score >= 60; // 计算表达式结果,赋值给boolean变量

console.log(isPass); // 输出true(通过) 

// 逻辑运算:与(&&)、或(||)、非(!) 

let isFullScore: boolean = score === 100;

 console.log(isPass && isFullScore); // 输出false(通过但不是满分)

 console.log(isPass || isFullScore); // 输出true(至少满足一个条件)

04

数组(array):竞赛里的“批量数据收纳盒”

1. 数组的规范定义

ArkTS竞赛中,数组定义必须严格标注元素类型(鸿蒙规范+竞赛判题要求),两种常用写法:

// 写法1:基础写法(竞赛最常用) 

let 数组名: 元素类型[] = [元素1, 元素2, ...]; 

// 写法2:泛型写法(等价,偶尔考) 

let 数组名: Array<元素类型> = [元素1, 元素2, ...]; 

 // 示例:存储竞赛选手得分(number类型数组,竞赛真题高频) 

let scores: number[] = [85, 92, 78, 90, 88];

// 示例:存储竞赛题目答案(string类型数组) 

let answers: string[] = ["A", "B", "C", "A", "D"];

2. 数组的核心操作(竞赛必用)

竞赛里数组常考「遍历、增删改查、统计计算」,咱们逐个讲实战用法:

遍历就是“挨个翻收纳盒里的东西”,竞赛里统计总和、找最大值/最小值、筛选数据都要用到,三种常用遍历方式(优先推荐forEach,符合鸿蒙规范):

// 示例:统计竞赛选手得分总和(蓝桥杯入门题) 

let scores: number[] = [85, 92, 78, 90, 88];

let sum: number = 0; 

// 方式1:for循环(新手易踩索引坑,索引从0开始!) 

for (let i: number = 0; i < scores.length; i++) {  

sum += scores[i]; 

} 

console.log('测试 总分(for循环)', sum); // 输出433 

// 方式2:forEach遍历(鸿蒙推荐,不用管索引,不易错) 

sum = 0; // 重置总和

scores.forEach((score: number) => {  

sum += score; 

}); console.log('测试 总分(forEach)', sum); // 输出433 

 // 方式3:for...of遍历(简洁,竞赛偶尔用)

sum = 0; 

for (const score of scores) {  

sum += score; 

} 

console.log('测试 总分(for...of)', sum); // 输出433

竞赛里常考“添加选手得分、删除无效成绩、修改错误分数”,核心方法如下(记牢!):

let scores: number[] = [85, 92, 78]; 

// ① 新增元素:push(末尾加,竞赛最常用) 

scores.push(90); // 末尾添加90

console.log('测试 push后', scores); // 输出[85,92,78,90] 

// ② 删除元素:pop(删末尾)/ splice(删指定位置,竞赛高频) 

scores.pop(); // 删除末尾的90

console.log('测试 pop后', scores); // 输出[85,92,78] 

// splice(起始索引, 删除个数):删除第2个元素(索引1)scores.splice(1, 1); console.log('测试 splice后', scores); // 输出[85,78] 

// ③ 修改元素:直接通过索引赋值(之前讲过,竞赛必用) 

scores[1] = 88; // 把第二个元素(78)改成88 

console.log('测试 修改后', scores); // 输出[85,88] 

// ④ 查找元素:indexOf(找元素位置,竞赛判题常用) 

let index: number = scores.indexOf(88);

console.log('测试 88的索引', index); // 输出1(索引从0开始!)

这是蓝桥杯、鸿蒙开发竞赛入门题的“标配”,比如“找出选手最高分”“计算平均分”:

// 示例:找选手最高分+计算平均分(竞赛真题) 

let scores: number[] = [85, 92, 78, 90, 88];

let maxScore: number = scores[0]; // 初始化最大值为第一个元素 

let avgScore: number = 0; 

let sum: number = 0; 

 // 遍历找最大值 

scores.forEach((score: number) => {  

sum += score;  

if (score > maxScore) {    

maxScore = score; // 更新最大值  

} 

}); 

avgScore = sum / scores.length; // 计算平均分 

console.log('测试 最高分', maxScore); // 输出92 

console.log('测试 平均分', avgScore); // 输出86.6

3. 数组的高频坑点(竞赛踩坑重灾区)

05

对象(object):竞赛里的“结构化信息卡片”

如果说数组是“收纳盒”,那对象就是“信息卡片”——适合存储有多个属性的结构化数据,比如竞赛选手的“姓名+得分+排名”、题目“题号+内容+答案”,这是竞赛中处理复杂数据的核心!

  1. 对象的规范定义

ArkTS中定义对象必须标注属性类型常用写法:

// 写法:接口+类 

interface Player { // 接口定规矩,大驼峰+I前缀(鸿蒙规范)  

name: string;  

score: number;  

rank?: number; 

} 

let player: Player = {  

name: "小明", 

score: 92, 

rank:1

};

console.log('测试',JSON.stringify(player))

2. 对象的核心操作(竞赛必用)

竞赛里读取选手姓名、得分都靠这个,用点语法

let player:Player = { name: "小明", score: 92 }; 

// 点语法(竞赛最常用) console.log('测试 选手姓名', player.name); // 输出小明

console.log('测试 选手得分', player.score); // 输出92

竞赛里常考“修改选手错误得分”“新增选手排名”:

let player:Player = { name: "小明", score: 92 }; 

// ① 修改已有属性 player.score = 95; // 把得分从92改成95 

console.log('测试 修改后得分', player.score); // 输出95 

// ② 新增属性(注意先在类型标注里加?,表示可选) 

player.rank = 1; // 新增排名属性

console.log('测试 新增排名后', player); // 输出{name: '小明', score: 95, rank: 1}

这是竞赛进阶题的“必考项”——用数组存储多个对象(比如多个选手信息),比如“统计晋级选手名单”“按得分排序选手”:

// 先定义接口类型 

interface Player {  

name: string;  

score: number;  

isPromote: boolean; 

} 

// 定义对象数组:存储3个选手信息(竞赛真题高频) 

let players: Player[] = [  

{ name: "小明", score: 92, isPromote: true },  

{ name: "小红", score: 78, isPromote: false },  

{ name: "小刚", score: 88, isPromote: true } 

]; 

// 示例1:遍历对象数组,打印所有晋级选手(竞赛判题常用) 

console.log('测试 晋级选手:');

players.forEach((player: Player) => {  

if (player.isPromote) {    

console.log('测试', `${player.name}(得分:${player.score})`); 

} 

}); 

// 输出: 

// 测试 晋级选手: 

// 测试 小明(得分:92) 

// 测试 小刚(得分:88) 

// 示例2:按得分降序排序(竞赛高频排序题)

players.sort((a, b) => b.score - a.score); // 降序排序 

console.log('测试 按得分排序后: ' + players.map(p => `${p.name}(${p.score})`).join(' → ')); 

// 输出:小明(92)→ 小刚(88)→ 小红(78)

3

常见坑点与避坑指南

坑1:数据类型不匹配:比如把string类型的数字("10")和number类型的数字(20)相加,结果会变成"1020"而不是30。避坑方法:用Number()或parseInt()把string转成number。

坑2:const变量重新赋值:比如用const定义循环边界,后续不小心修改了,程序直接报错。避坑方法:不确定是否修改的变量,先先用let;确定不变的再用const。

坑3:变量未初始化:比如let sum: number; 直接用sum += 1; 程序会报错(sum是undefined,不能参与运算)。避坑方法:定义变量时一定要初始化(比如let sum: number = 0;)。

04

本章小结与竞赛考点预告

  • 核心要点回顾

    • 变量是存数据的“容器”,数据类型是“标签”,二者缺一不可;

    • 定义变量用let(可改)和const(不可改),命名遵循小驼峰;

    • 核心数据类型:number、string、boolean、array,object 重点掌握类型匹配和转换。

最新文章

随机文章