第2篇:数据与类型——存储信息的基础 鸿蒙中文编程
本文介绍了ArkTS编程语言中的数据类型基础概念,通过生活化的"盒子"比喻帮助理解。主要内容包括: 数据类型分类: 数字(number):存储年龄、身高等数值 文字(string):存储姓名、地址等文本 布尔值(boolean):存储真/假状态 数组:存储多个同类型数据 变量与常量: let声明可变变量 const声明不可变常量 类型推断: ArkTS能自动推断变量类型 实际应
第2篇:数据与类型——存储信息的基础
本课目标:掌握ArkTS的基本数据类型,学会存储各种信息
**作者:**中文编程倡导者—— 李金雨
预计课时:2课时(90分钟)
难度等级:⭐⭐(基础)
一、开篇引入
1.1 生活中的"数据"
想象一下,如果你要介绍自己,你会说什么?
- 我叫张三(文字)
- 我今年15岁(数字)
- 我是男生(是/不是)
- 我喜欢篮球、音乐、编程(多个文字)
这些都是数据——用来描述事物的信息。
1.2 程序中的数据
上一节课,我们写了这样的代码:
@State 欢迎语: string = '你好,鸿蒙!'
这里的 '你好,鸿蒙!' 就是数据,我们把它存在了 欢迎语 这个"盒子"里。
1.3 本课目标
今天我们要学习:
- 什么是数据(用盒子来理解)
- 不同类型的数据(数字、文字、真假、多个数据)
- 怎么创建和使用数据
- 做一个个人信息档案应用
1.4 预期成果
完成本课后,你能做出这样的应用:
┌─────────────────────────┐
│ 我的个人档案 │
├─────────────────────────┤
│ 姓名:张三 │
│ 年龄:15岁 │
│ 身高:1.75米 │
│ 是否学生:是 │
│ 爱好:篮球、音乐、编程 │
│ │
│ BMI指数:22.5 │
│ 体重状态:正常 │
└─────────────────────────┘
二、概念讲解
2.1 什么是数据?——盒子的比喻
生活例子:整理房间
想象你有一个储物柜,里面有很多盒子,每个盒子上贴着标签:
┌─────────────┐
│ 玩具盒子 │ → 里面装玩具
├─────────────┤
│ 书本盒子 │ → 里面装书本
├─────────────┤
│ 文具盒子 │ → 里面装文具
└─────────────┘
在编程中,数据就像是盒子里的东西,而变量就是贴标签的盒子。
程序中的"盒子"
let 姓名: string = "张三" // 一个叫"姓名"的盒子,装着"张三"
let 年龄: number = 15 // 一个叫"年龄"的盒子,装着15
let 是否学生: boolean = true // 一个叫"是否学生"的盒子,装着"是"
| 代码部分 | 含义 | 盒子比喻 |
|---|---|---|
let |
创建一个新盒子 | 拿出一个新盒子 |
姓名 |
盒子的名字(标签) | 在盒子上贴标签 |
: |
指定盒子的类型 | 规定这个盒子只能装什么 |
string |
文字类型 | 只能装文字的盒子 |
= |
把东西放进盒子 | 往盒子里放东西 |
"张三" |
具体的内容 | 盒子里装的东西 |
2.2 数据的类型
不同类型的数据,就像不同规格的盒子:
类型1:数字(number)——装数字的盒子
用来存储年龄、身高、体重、成绩、价格等数字信息。
let 年龄: number = 15 // 整数
let 身高: number = 1.75 // 小数
let 体重: number = 60.5 // 小数
let 圆周率: number = 3.14159 // 小数
let 温度: number = -5 // 负数也可以
生活例子:
- 你的年龄:15
- 你的身高:1.75米
- 考试分数:95.5分
- 气温:-3度
可以对数字做的运算:
let 数学成绩: number = 90
let 语文成绩: number = 85
let 总分: number = 数学成绩 + 语文成绩 // 加法:175
let 平均分: number = 总分 / 2 // 除法:87.5
let 差值: number = 数学成绩 - 语文成绩 // 减法:5
let 翻倍: number = 数学成绩 * 2 // 乘法:180
类型2:文字(string)——装文字的盒子
用来存储名字、地址、句子、文章内容等文字信息。
let 姓名: string = "张三"
let 学校: string = "实验中学"
let 座右铭: string = "好好学习,天天向上"
let 空文字: string = "" // 空的文字盒子
注意:文字必须用引号包起来(单引号'或双引号"都可以)
可以对文字做的操作:
let 姓: string = "张"
let 名: string = "三"
let 全名: string = 姓 + 名 // 连接:"张三"
let 自我介绍: string = "我叫" + 全名 // "我叫张三"
let 重复: string = "哈".repeat(3) // 重复:"哈哈哈"
let 长度: number = "Hello".length // 长度:5
类型3:真假(boolean)——装"是/否"的盒子
只有两种可能的值:true(真/是)或 false(假/否)
let 是否学生: boolean = true
let 是否成年: boolean = false
let 是否会员: boolean = true
let 是否在线: boolean = false
生活例子:
- 你是学生吗?是(true)
- 你成年了吗?否(false)
- 今天下雨了吗?否(false)
- 这个账号是VIP吗?是(true)
真假判断:
let 年龄: number = 15
let 是否成年: boolean = 年龄 >= 18 // false(15小于18)
let 分数: number = 90
let 是否及格: boolean = 分数 >= 60 // true(90大于60)
let 姓名: string = "张三"
let 是否叫张三: boolean = 姓名 == "张三" // true
比较符号:
| 符号 | 含义 | 例子 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 5 > 3 |
true |
< |
小于 | 5 < 3 |
false |
>= |
大于等于 | 5 >= 5 |
true |
<= |
小于等于 | 3 <= 5 |
true |
类型4:多个数据(数组)——装很多东西的大盒子
用来存储一组相同类型的数据,比如成绩列表、好友名单、购物车商品等。
let 成绩列表: number[] = [85, 92, 78, 96, 88]
let 好友名单: string[] = ["张三", "李四", "王五"]
let 星期列表: string[] = ["周一", "周二", "周三", "周四", "周五"]
生活例子:
- 你这周的考试成绩:[85, 92, 78, 96, 88]
- 你的好朋友:[“小明”, “小红”, “小刚”]
- 购物清单:[“苹果”, “香蕉”, “牛奶”]
怎么使用数组里的数据:
let 成绩列表: number[] = [85, 92, 78, 96, 88]
// 获取第1个成绩(注意:编程中从0开始数)
let 第一个成绩: number = 成绩列表[0] // 85
// 获取第2个成绩
let 第二个成绩: number = 成绩列表[1] // 92
// 获取第5个成绩
let 第五个成绩: number = 成绩列表[4] // 88
// 获取数组长度
let 有几门课: number = 成绩列表.length // 5
// 计算总分
let 总分: number = 成绩列表[0] + 成绩列表[1] + 成绩列表[2] + 成绩列表[3] + 成绩列表[4]
数组的常用操作:
let 购物车: string[] = ["苹果", "香蕉"]
// 添加商品
购物车.push("牛奶") // ["苹果", "香蕉", "牛奶"]
// 删除最后一个
购物车.pop() // ["苹果", "香蕉"]
// 在开头添加
购物车.unshift("面包") // ["面包", "苹果", "香蕉"]
// 删除第一个
购物车.shift() // ["苹果", "香蕉"]
2.3 固定数据(常量)
有些数据是永远不变的,比如:
- 圆周率 = 3.14159
- 一年有12个月
- 一周有7天
这些数据我们用 const 来创建,表示"固定不变":
const 圆周率: number = 3.14159
const 月份数: number = 12
const 星期数: number = 7
const 应用名称: string = "我的计算器"
let 和 const 的区别:
| 关键字 | 含义 | 能否修改 | 使用场景 |
|---|---|---|---|
let |
变量 | 可以修改 | 会变的数据(年龄、分数等) |
const |
常量 | 不能修改 | 不变的数据(圆周率、月份数等) |
let 年龄: number = 15
年龄 = 16 // ✓ 可以,年龄会增长
const 圆周率: number = 3.14159
圆周率 = 3.14 // ✗ 错误!常量不能修改
2.4 类型推断——聪明的ArkTS
ArkTS很聪明,有时候你不用告诉它类型,它也能猜出来:
// 明确指定类型
let 姓名: string = "张三"
// 让ArkTS自己推断类型
let 姓名 = "张三" // ArkTS知道这是string类型
let 年龄 = 15 // ArkTS知道这是number类型
let 是否学生 = true // ArkTS知道这是boolean类型
但是,为了代码更清晰,建议初学者还是写上类型!
三、动手实践
3.1 基础练习:创建个人数据
打开DevEco Studio,创建一个新项目,在 Index.ets 中写:
// 完整可运行代码,复制到 Index.ets 即可运行
@Entry
@Component
struct Index {
// 使用 @State 定义数据(ArkTS中组件内要用@State而不是let)
@State 姓名: string = "张三"
@State 年龄: number = 15
@State 身高: number = 1.75 // 单位:米
@State 体重: number = 60 // 单位:公斤
@State 是否学生: boolean = true
@State 爱好列表: string[] = ["篮球", "音乐", "编程"]
// 常量可以写在组件外面,或者直接用值
学校名称: string = "实验中学"
build() {
Column({ space: 15 }) {
Text("我的个人档案")
.fontSize(30)
.fontWeight(FontWeight.Bold)
.fontColor("#333333")
// 显示基本信息
Text(`姓名:${this.姓名}`)
.fontSize(20)
Text(`年龄:${this.年龄}岁`)
.fontSize(20)
Text(`身高:${this.身高}米`)
.fontSize(20)
Text(`体重:${this.体重}公斤`)
.fontSize(20)
Text(`学校:${this.学校名称}`)
.fontSize(20)
Text(`是否学生:${this.是否学生 ? "是" : "否"}`)
.fontSize(20)
// 显示爱好
Text(`爱好:${this.爱好列表.join("、")}`)
.fontSize(20)
}
.width('100%')
.padding(20)
}
}
注意:上面代码有个错误!你发现了吗?
在ArkTS中,let 和 const 不能直接写在组件里,要改成 @State:
@Entry
@Component
struct Index {
// 使用 @State 定义数据
@State 姓名: string = "张三"
@State 年龄: number = 15
@State 身高: number = 1.75
@State 体重: number = 60
@State 是否学生: boolean = true
@State 爱好列表: string[] = ["篮球", "音乐", "编程"]
// 常量可以写在组件外面,或者直接用值
学校名称: string = "实验中学"
build() {
// ... 界面代码
}
}
3.2 进阶练习:BMI计算器
BMI(身体质量指数)是衡量身体健康的一个指标,计算公式是:
BMI = 体重(kg) ÷ 身高(m)²
让我们做一个BMI计算器:
// 完整可运行代码,复制到 Index.ets 即可运行
@Entry
@Component
struct Index {
@State 体重: number = 60
@State 身高: number = 1.75
// 计算BMI的功能
计算BMI(): number {
return this.体重 / (this.身高 * this.身高)
}
// 判断体重状态
获取体重状态(): string {
let bmi: number = this.计算BMI()
if (bmi < 18.5) {
return "偏瘦"
} else if (bmi < 24) {
return "正常"
} else if (bmi < 28) {
return "偏胖"
} else {
return "肥胖"
}
}
build() {
Column({ space: 20 }) {
Text("BMI计算器")
.fontSize(35)
.fontWeight(FontWeight.Bold)
.fontColor("#2196F3")
// 显示当前数据
Text(`体重:${this.体重}公斤`)
.fontSize(20)
Text(`身高:${this.身高}米`)
.fontSize(20)
// 显示计算结果
Text(`BMI指数:${this.计算BMI().toFixed(2)}`)
.fontSize(25)
.fontWeight(FontWeight.Bold)
Text(`体重状态:${this.获取体重状态()}`)
.fontSize(25)
.fontColor(this.获取体重状态() == "正常" ? "#4CAF50" : "#FF5722")
}
.width('100%')
.height('100%')
.padding(30)
.backgroundColor('#F5F5F5')
.justifyContent(FlexAlign.Center)
}
}
3.3 BMI标准参考
| BMI范围 | 体重状态 | 建议 |
|---|---|---|
| < 18.5 | 偏瘦 | 适当增加营养 |
| 18.5 - 23.9 | 正常 | 继续保持 |
| 24.0 - 27.9 | 偏胖 | 适当运动 |
| ≥ 28.0 | 肥胖 | 需要减重 |
3.4 挑战练习:成绩统计器
做一个成绩统计应用,功能包括:
- 显示各科成绩
- 计算总分
- 计算平均分
- 显示最高分
- 显示最低分
// 完整可运行代码,复制到 Index.ets 即可运行
@Entry
@Component
struct Index {
@State 成绩列表: number[] = [85, 92, 78, 96, 88, 90]
@State 科目列表: string[] = ["语文", "数学", "英语", "物理", "化学", "生物"]
// 计算总分
计算总分(): number {
let 总分: number = 0
for (let i = 0; i < this.成绩列表.length; i++) {
总分 = 总分 + this.成绩列表[i]
}
return 总分
}
// 计算平均分
计算平均分(): number {
return this.计算总分() / this.成绩列表.length
}
// 获取最高分
获取最高分(): number {
let 最高分: number = this.成绩列表[0]
for (let i = 1; i < this.成绩列表.length; i++) {
if (this.成绩列表[i] > 最高分) {
最高分 = this.成绩列表[i]
}
}
return 最高分
}
// 获取最低分
获取最低分(): number {
let 最低分: number = this.成绩列表[0]
for (let i = 1; i < this.成绩列表.length; i++) {
if (this.成绩列表[i] < 最低分) {
最低分 = this.成绩列表[i]
}
}
return 最低分
}
build() {
Column({ space: 15 }) {
Text("成绩统计器")
.fontSize(30)
.fontWeight(FontWeight.Bold)
.fontColor("#2196F3")
// 显示各科成绩
Text("各科成绩:")
.fontSize(22)
.fontWeight(FontWeight.Bold)
ForEach(this.成绩列表, (成绩: number, 索引: number) => {
Text(`${this.科目列表[索引]}:${成绩}分`)
.fontSize(18)
})
// 显示统计结果
Column({ space: 10 }) {
Text(`总分:${this.计算总分()}分`)
.fontSize(20)
.fontColor("#4CAF50")
Text(`平均分:${this.计算平均分().toFixed(1)}分`)
.fontSize(20)
.fontColor("#2196F3")
Text(`最高分:${this.获取最高分()}分`)
.fontSize(20)
.fontColor("#FF9800")
Text(`最低分:${this.获取最低分()}分`)
.fontSize(20)
.fontColor("#F44336")
}
.margin({ top: 20 })
.padding(20)
.backgroundColor("#FFFFFF")
.borderRadius(10)
}
.width('100%')
.height('100%')
.padding(20)
.backgroundColor('#F5F5F5')
}
}
四、知识总结
4.1 核心概念回顾
- 数据 = 存储信息的"盒子"
- 变量(
let)= 可以改内容的盒子 - 常量(
const)= 不能改内容的盒子
4.2 四种基本数据类型
| 类型 | 英文 | 存储内容 | 例子 |
|---|---|---|---|
| 数字 | number | 整数、小数 | 15, 1.75, -5 |
| 文字 | string | 文字、句子 | "张三", "Hello" |
| 真假 | boolean | true/false | true, false |
| 数组 | 类型[] | 多个同类型数据 | [85, 92, 78] |
4.3 关键代码速查
// 创建变量
let 名字: 类型 = 值
// 创建常量
const 名字: 类型 = 值
// 数字运算
加:a + b
减:a - b
乘:a * b
除:a / b
// 文字连接
let 全名: string = 姓 + 名
// 数组操作
数组[0] // 获取第1个
数组.length // 获取长度
数组.push(值) // 添加到最后
数组.pop() // 删除最后一个
// 比较运算
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
4.4 常见错误提醒
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 类型不匹配 | 把文字赋给数字变量 | 检查类型是否对应 |
| 变量未定义 | 使用了没创建的变量 | 先用let创建变量 |
| 数组越界 | 访问了不存在的索引 | 检查索引是否小于length |
| 常量被修改 | 用const定义的变量被赋值 |
改用let,或不要修改 |
| 文字没引号 | string类型没加引号 | 加上""或'' |
五、课后作业
5.1 巩固练习(必做)
练习1:完善个人档案
在上面的个人档案基础上,添加:
- 计算并显示BMI
- 显示体重状态
- 添加"星座"(根据生日判断)
练习2:班级通讯录
创建一个包含3个同学信息的应用,显示:
- 姓名
- 年龄
- 电话号码
- 家庭住址
使用数组存储多个同学的信息。
练习3:购物清单
做一个购物清单应用:
- 显示商品列表
- 显示商品数量
- 计算总价(假设每个商品10元)
5.2 创意编程(选做)
创意1:生日倒计时
输入你的生日,计算:
- 今年几岁
- 距离下次生日还有多少天
创意2:成绩等级评定
输入成绩,显示等级:
- 90-100:优秀
- 80-89:良好
- 70-79:中等
- 60-69:及格
- <60:不及格
创意3:简易计算器
做两个输入框,输入两个数字,显示:
- 相加结果
- 相减结果
- 相乘结果
- 相除结果
5.3 下篇预习
下一篇,我们将学习界面基础,了解如何使用各种组件构建漂亮的页面。预习问题:
- 手机应用里都有哪些常见的界面元素?(按钮、输入框、图片等)
- 怎么让文字和图片排列整齐?
- 怎么改变界面的颜色和样式?
附录:更多例子
例子1:温度转换器
// 完整可运行代码,复制到 Index.ets 即可运行
@Entry
@Component
struct Index {
@State 摄氏温度: number = 25
转华氏温度(): number {
return this.摄氏温度 * 9 / 5 + 32
}
转开尔文温度(): number {
return this.摄氏温度 + 273.15
}
build() {
Column({ space: 20 }) {
Text("温度转换器")
.fontSize(30)
Text(`摄氏:${this.摄氏温度}°C`)
.fontSize(25)
Text(`华氏:${this.转华氏温度()}°F`)
.fontSize(25)
Text(`开尔文:${this.转开尔文温度()}K`)
.fontSize(25)
}
.padding(30)
}
}
例子2:简单记账本
// 完整可运行代码,复制到 Index.ets 即可运行
@Entry
@Component
struct Index {
@State 支出列表: number[] = [25, 18, 56, 12, 30]
@State 支出项目: string[] = ["早餐", "饮料", "文具", "零食", "交通"]
计算总支出(): number {
let 总和: number = 0
for (let 支出 of this.支出列表) {
总和 += 支出
}
return 总和
}
build() {
Column({ space: 10 }) {
Text("今日支出")
.fontSize(30)
ForEach(this.支出列表, (金额: number, 索引: number) => {
Row() {
Text(this.支出项目[索引])
.width('50%')
Text(`¥${金额}`)
.width('50%')
}
.width('100%')
.padding(10)
.backgroundColor('#F0F0F0')
})
Text(`今日总支出:¥${this.计算总支出()}`)
.fontSize(25)
.fontColor('#F44336')
.margin({ top: 20 })
}
.padding(20)
}
}
恭喜你完成了第2篇的学习! 🎉
现在你已经学会了如何在程序中存储和处理各种数据。这是编程的基础,就像学会了写字,接下来就可以写文章了!
下节课,我们将学习如何把这些数据显示在漂亮的界面上!
更多推荐


所有评论(0)