您好,欢迎光临上海图书公司! 登录
开源鸿蒙应用开发零基础入门(微课视频版)/计算机技术开发与应用丛书
ISBN:9787302688839
作者:编者:倪红军|责编:张玥//薛阳
定价:¥89.5
出版社:清华大学
版次:第1版
印次:第1次印刷
开本:4 平装
页数:1页
商品详情
目录

第1章  OpenHarmony应用开发环境
  1.1  OpenHarmony概述
    1.1.1  OpenHarmony的发展
    1.1.2  OpenHarmony的现状
    1.1.3  方舟开发框架
    1.1.4  OpenHarmony的技术架构
    1.1.5  OpenHarmony的技术特性
    1.1.6  OpenHarmony的系统类型
  1.2  OpenHarmony应用开发环境搭建
    1.2.1  DevEco Studio介绍
    1.2.2  搭建Windows平台开发环境
    1.2.3  搭建macOS平台开发环境
  小结
第2章  OpenHarmony应用的工程结构
  2.1  创建OpenHarmony工程
    2.1.1  第一个OpenHarmony工程
    2.1.2  OpenHarmony应用程序包
  2.2  OpenHarmony工程目录结构
    2.2.1  工程级目录结构
    2.2.2  模块级目录结构
    2.2.3  资源分类与引用
    2.2.4  ArkTS语言的基本结构
  小结
第3章  ArkTS程序设计基础
  3.1  ArkTS基本语法
    3.1.1  变量和常量
    3.1.2  数据类型
    3.1.3  运算符
    3.1.4  控制流程
  3.2  函数
    3.2.1  标准库函数
    3.2.2  用户自定义函数
    3.2.3  函数重载
  3.3  类和对象
    3.3.1  类的定义和使用
    3.3.2  类的继承
    3.3.3  可见性修饰符
    3.3.4  对象字面量
  3.4  接口
    3.4.1  接口的定义和使用
    3.4.2  接口的继承
  3.5  泛型
    3.5.1  泛型类/接口
    3.5.2  泛型函数
    3.5.3  泛型默认值
  3.6  异常
    3.6.1  抛出异常
    3.6.2  捕获异常
  小结
第4章  界面基础组件与布局
  4.1  概述
    4.1.1  组件
    4.1.2  状态管理
    4.1.3  事件
    4.1.4  布局
  4.2  四则运算练习器的设计与实现
    4.2.1  Button组件
    4.2.2  Text组件
    4.2.3  TextInput组件
    4.2.4  Image组件
    4.2.5  Tabs和TabContent组件
    4.2.6  案例: 四则运算练习器
  4.3  拼图游戏的设计与实现
    4.3.1  Menu组件
    4.3.2  TextTimer组件
    4.3.3  Progress组件
    4.3.4  Grid和GridItem组件
    4.3.5  Panel组件
    4.3.6  案例: 拼图游戏
  4.4  毕业生满意度调查表的设计与实现
    4.4.1  TextPicker组件
    4.4.2  TextPickerDialog组件
    4.4.3  DatePicker组件
    4.4.4  DatePickerDialog组件
    4.4.5  TimePicker组件
    4.4.6  TimePickerDialog组件
    4.4.7  Slider组件
    4.4.8  Rating组件
    4.4.9  Radio组件
    4.4.10  Checkbox和CheckboxGroup组件
    4.4.11  案例: 毕业生满意度调查表
  小结
第5章  数据存储与访问
  5.1  概述
    5.1.1  数据管理机制
    5.1.2  文件管理机制
  5.2  睡眠质量测试系统的设计与实现
    5.2.1  Toggle组件
    5.2.2  Stepper和StepperItem组件
    5.2.3  页面路由
    5.2.4  UIAbility组件
    5.2.5  用户首选项存储与访问接口
    5.2.6  案例: 睡眠质量测试系统
  5.3  备忘录的设计与实现
    5.3.1  CustomDialog组件
    5.3.2  应用文件存储与访问接口
    5.3.3  List、ListItem和ListItemGroup组件
    5.3.4  案例: 备忘录
  5.4  我爱背单词的设计与实现
    5.4.1  ResourceManager接口
    5.4.2  Search组件
    5.4.3  Badge组件
    5.4.4  关系数据接口
    5.4.5  案例: 我爱背单词
  小结
第6章  多媒体应用开发
  6.1  概述
    6.1.1  音频接口
    6.1.2  视频接口
    6.1.3  相机接口
    6.1.4  图片接口
  6.2  影音播放器的设计与实现
    6.2.1  AVPlayer
    6.2.2  监听和取消监听事件
    6.2.3  XComponent
    6.2.4  Video组件
    6.2.5  媒体查询
    6.2.6  案例: 影音播放器
  6.3  图片编辑器的设计与实现
    6.3.1  PhotoViewPicker
    6.3.2  图片处理接口
    6.3.3  Canvas组件
    6.3.4  CanvasRenderingContext2D
    6.3.5  案例: 图片编辑器
  小结
第7章  网络应用开发
  7.1  概述
    7.1.1  HTTP访问网络
    7.1.2  Web组件
  7.2  股票行情查询工具的设计与实现
    7.2.1  数据请求接口
    7.2.2  Swiper组件
    7.2.3  案例: 股票行情查询工具
  小结
第8章  传感器与位置服务应用开发
  8.1  概述
    8.1.1  传感器
    8.1.2  位置服务
  8.2  传感器的应用
    8.2.1  传感器接口
    8.2.2  振动
    8.2.3  案例: 指南针的设计与实现
  8.3  位置服务的应用
    8.3.1  位置服务接口
    8.3.2  案例: 高德地图在鸿蒙中的应用
  小结
第9章  元服务与端云一体化开发
  9.1  元服务
    9.1.1  什么是元服务
    9.1.2  元服务图标
    9.1.3  案例: 便携记分牌元服务开发
  9.2  端云一体化开发
    9.2.1  服务卡片
    9.2.2  端云一体化开发
    9.2.3  案例: 实验室安全测试系统的开发
  小结

精彩页/试读片段

    第3章
    ArkTS程序设计基础
    ArkTS是在TypeScript(TS)生态基础上匹配ArkUI框架、目前用于鸿蒙系统应用开
    发的主力开发语言。它兼容TypeScript语言,拓展了声明式UI、状态管理、并发任务等能
    力,既让开发者以更简洁、更自然的方式开发应用,又能够提升程序执行的稳定性和性能。
    3.1 ArkTS基本语法
    TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,而ArkTS则是在继
    承TypeScript语法的基础上进行了优化,并旨在保持TypeScript的大部分语法,让开发者
    快速上手。
    3.1.1 变量和常量
    1.变量
    变量来源于数学,是计算机语言中能存放计算结果或能表示值的标识符,变量既可以通
    过变量名获取变量的值,也可以通过变量名给变量赋值。变量名的命名规则如下。
    (1)变量名必须由数字、字母、下画线或中文字符组成。
    (2)变量名开头不能是数字。
    (3)变量名不能是保留字或关键字。
    (4)变量名区分大小写。
    变量使用前必须先声明,ArkTS中用let声明变量有下列4种方式。
    1 let 变量名:类型=值 //声明指定类型和初始值的变量
    2 let 变量名:类型 //声明指定类型的变量,其初始值默认为undefined
    3 let 变量名=值 //声明指定值的变量,其类型由值类型决定
    4 let 变量名 //声明指定变量,其类型任意
    【例3-1】 定义一个用于存放学生姓名、语文成绩、数学成绩和总成绩的变量。代码
    如下。
    2 7
    1 let stuName: string ="张三"
    2 let cScore =86
    3 let mScore =78
    4 let sum =cScore +mScore
    5 console.log("姓名:", stuName)
    6 console.log("语文:", cScore)
    7 console.log("数学:", mScore)
    8 console.log("总分:", sum)
    上述第1行代码表示声明一个string类型的stuName变量;第2行代码表示声明一个
    cScore变量,该变量的数据类型由赋予值的类型决定,即86默认为number类型,所以
    cScore变量为number类型。如果接着输入下列两行代码,则第1行代码正常编译,而第2
    行代码会报错。
    1 cScore =100 //100 默认为number 类型,与cScore 数据类型一致
    2 cScore ="78.8" //"78.8"默认为string 类型,与cScore 数据类型不一致
    2.常量
    常量也称常数,是指在整个程序运行过程中一种恒定的或不可变的数据。它既可以是
    不随时间变化的某些量和信息,也可以是表示某一数据的字符或字符串,通常直接用数值或
    常量名表示,ArkTS中用const声明常量,可以有下列两种方式。
    1 const 常量名:类型=值 //声明指定类型和值的常量
    2 const 常量名=值 //声明指定值的常量,其类型由值类型决定
    例如,直接声明一个pi常量并赋值的代码如下。
    1 const pi =3.1425
    上述代码表示声明一个pi常量,该pi常量的数据类型由赋予值的类型决定,即3.1425
    默认为number类型,所以pi常量为number类型。如果接着输入下列一行代码,则该行代
    码会报错。
    1 pi =3.1415926
    由于pi在前面的代码中已经用const声明为常量,一旦常量已经赋值,就不能再给该常
    量重新赋值。
    3.1.2 数据类型
    ArkTS语言支持数值、字符串、布尔、数组、枚举、void、Object、联合等数据类型。
    1.数值类型
    数值类型(number)的数据可以表示任何整数和浮点数。整数可以用十进制、十六进制
    (以0x或0X开头)、八进制(以0o或0O 开头)及二进制(以0b或0B开头)表示。浮点数可
    以包含小数点(“.”)或以“e”“E”开头的指数部分。
    【例3-2】 下列代码表示用不同的形式定义整数变量和浮点数变量。
    1 let n1 =117 //十进制整数
    2 let n2 =0x117 //十六进制整数
    28
    3 let n3 =0o117 //八进制整数
    4 let n4 =0b110 //二进制整数
    5 let n5 =3.1415926 //浮点数
    6 let n6 =.5 //浮点数
    7 let n7 =1.5e3 //浮点数,表示1500
    2.字符串类型
    11 case 6:
    12 console.log("info", `周${week}吃米饭`)
    13 break
    14 default:
    15 console.log("info", `周${week}吃馒头`)
    16 }
    2.循环结构
    循环结构用于控制代码的执行次数,由循环语句实现,ArkTS语言中包括以下4种条
    件语句。
    1)for循环语句
    for循环语句用于多次执行一个语句块,其语法结构如下。
    1 for ( 初始化表达式; 条件表达式; 更新表达式){
    2 循环体
    3 }
    36
    首先执行初始化表达式,然后判断条件表达式,如果条件表达式的值为true,则执行循
    环体,循环体语句执行完后,执行更新表达式,然后继续判断条件表达式,如果条件表达式的
    值为true,则执行循环体,以此重复;如果条件表达式的值为false,则退出循环体。
    【例3-10】 求10的阶乘,实现代码如下。
    1 let fact =1
    2 for (let i =10; i >0; i--) {
    3 fact =fact * i
    4 }
    2)for…of循环语句
    for…of循环语句用于遍历数组、字符串等可迭代的数据,其语法结构如下。
    1 for (循环变量of 数组/字符串) {
    2 循环体
    3 }
    【例3-11】 用for…of循环语句输出交通工具名称,实现代码如下。
    1 let vehicles =['飞机', '轮船', '汽车', '自行车']
    2 for (let vehicle of vehicles) {
    3 console.log("info", `交通工具为:${vehicle}`)
    4 }
    3)while循环语句
    while循环表示根据条件重复执行循环体的内容。它有while和do…while两种形式。
    while形式是先判断条件,然后才根据条件决定是否执行循环体。也就是当条件为真
    时,才重复执行循环体。其语法结构格式如下。
    1 while (条件表达式) {
    2 //循环体
    3 }
    【例3-12】 求满足1+2+3+4+5+…+n<10000表达式中最大的n值,实现代码
    如下。
    1 let s =0
    2 let n =0
    3 while (s <1000) {
    4 n++
    5 s =s +n
    6 }
    7 console.log("info", `最大的n 值:${n -1}`)
    上述第7行代码输出的n-1值为满足表达式最大值,因为当s≥1000时,循环终止执
    行,但是此时n=n+1已经执行了一次,也就是多加了1,所以必须在最终结果中将其减掉。
    do…while形式是先执行循环体,然后判断条件,当条件为真时,才继续重复执行循环
    体。其语法结构格式如下。
    1 do{
    2 //循环体
    3 }while (条件)
    3 7
    由于在检查条件之前首先要执行do…while循环体,所以do…while循环体至少执行
    一次,即使while内的条件为false也要执行一次。例如,例3-12也可以用如下代码实现。
    1 do {
    2 n++
    3 s =s +n
    4 } while (s <10000)
    4)break、continue和return
    break语句的作用是在循环结构中终止本层循环体,从而提前结束本层循环。continue
    语句的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,也
    就是仅结束本次循环。return语句的作用是终止程序的运行。
    例如,下列语句执行时将0~100的所有奇数相加。
    1 for (let x =0; x <100; x++) {
    2 if (x %2 ==0) {
    3 continue
    4 }
    5 sum +=x
    6 }
    上述第2~4行代码表示,如果x能被整除,则跳过本次循环并进入下一次循环的条件
    判定。如果continue替换为break,则上述循环体仅执行一次,即sum 的最终值为0。
    3.2 函数
    函数是一组一起执行一个任务的语句,既可以封装在编程语言的标准库中(即标准库函
    数),也可以根据一个特定的任务由用户自定义(用户自定义函数)。
    3.2.1 标准库函数
    已经存在于ArkTS语言标准库中的函数称为标准库函数或内置函数或预定义函数。
    例如,前面用到的Math.random()函数,表示取0~1的随机数,它在标准函数库中已经存
    在,所以可以直接在代码中调用。还有前面用到的Math.floor()、console()等也是标准库函
    数,开发者可以选择所需的标准库函数在代码中直接使用。
    3.2.2 用户自定义函数
    用户自定义函数是由用户根据实际功能需要编写的代码块,这些代码块既能够在程序
    语句中重用,也能够让程序更易于管理。在使用函数之前需要先进行函数的声明定义,
    ArkTS语言中函数的声明定义格式如下。
    1 function 函数名(参数名1:参数类型1,参数名2:参数类型2,…):返回值类型{
    2 函数体
    3 }
    上述第1行代码中的function用来声明一个函数,表示它后面的内容是一个函数;“函
    38
    数名”用来指定自定义函数的名称,命名规则同变量名命名规则;“参数名:参数类型”用来指
    定自定义函数的参数及参数类型;“函数体”用来指定函数要执行的主体内容;如果函数执行
    完后需要返回值,则需要指定函数返回值类型;如果函数执行完后不需要返回值,则可以用
    void或者直接省略,即表示函数返回值类型为空。
    根据不同的应用场景,ArkTS语言中将函数分为无参函数、有参函数、匿名函数和箭头
    函数。无参数就是声明函数时,不需要定义参数,调用时不需要传入参数。例如,下列函数
    调用时不需要传入参数,会直接显示版权信息。
    1 function showInfo(){
    2 console.log("版权所有@南京师范大学泰州学院")
    3 }
    1.有参函数
    有参函数中的参数又可细分为没有默认值参数、有默认值参数、可选参数和剩余参数。
    1)没有默认值参数
    没有默认值参数也称为必选参数,就是在函数声明时并没有指定参数的默认值,但是在
    调用函数时必须指定参数的值。
    【例3-13】 定义一个求两数中较大值的函数,实现代码如下。
    1 /*声明函数*/
    2 function max(a: number, b: number): number {
    3 return a >b ? a : b;
    4 }
    5 /*调用函数*/
    6 let value =max ( 3,4 ) //value 的值为4
    上述代码定义的max(a:number,b:number)函数,a、b参数没有指定默认的参数值,
    调用该函数时,必须指定a、b参数的值。
    2)有默认值参数
    有默认值参数就是在函数声明时指定了参数默认值,调用函数时,如果不传入该参数的
    值,则使用默认参数。例如,用有默认值参数函数实现例3-13功能的代码如下。
    1 /*声明函数*/
    2 function max(a: number, b: number =9): number {
    3 return a >b ? a : b;
    4 }
    5 /*调用函数*/
    6 let value1=max ( 3 ) //value1 的值为9
    7 let value2 =max ( 13,23 ) //value2 的值为23
    3)可选参数
    可选参数表示在调用时可以传入参数的值,也可以不传入参数的值,声明函数时用“?”
    标识参数名。例如,下列代码表示根据传入的参数返回结果。
    1 /*声明函数*/
    2 function buildName(fName: string, lName? : string) {
    3 if (lName)
    3 9
    4 return fName +" " +lName;
    5 else
    6 return fName;
    7 }
    8 /*调用函数*/
    9 let result1 =buildName("Rose", "Yalsad") //result1 的值为Rose Yalsad
    10 let result2 =buildName("Kate") //result2 的值为Kate
    4)剩余参数
    在不能确定传入参数个数的开发场景中,可以用“...”将函数的参数声明为剩余参数。
    【例3-14】 定义一个能够求任意多个数之和的函数,实现代码如下。
    1 /*声明函数*/
    2 function addSums(...elements:number[]){
    3 let i;
    4 let sum:number =0;
    5 for(i =0;i    6 sum =sum +elements[i];
    7 }
    8 console.log("info",`和为:${sum}`)
    9 }
    10 /*调用函数*/
    11 addSums(1,2,3,5) //将1,2,3,5 相加
    12 addSums(10,23,22,23,34,45) //将10,23,22,23,34,45 相加
    2.匿名函数
    匿名函数是一个没有函数名的函数。它在程序运行时动态声明,除了没有函数名外,其
    他与自定义函数一样?
    字符串类型(string)的数据由单引号(')或双引号(")之间括起来的零个或多个字符组
    成。反引号(`)定义字符串模板中包含的多行文本或内嵌表达式。
    【例3-3】 下列代码表示用双引号定义字符串、反引号定义内嵌表达式。
    1 let osName: string ="OpenHarmony";
    2 let years: number =2;
    3 let content: string =`今年是${ osName } 发布${ years +1} 周年`;
    4 console.log("info",content) //输出:今年是OpenHarmony 发布3 周年
    上述第3行代码中的“${osName}”和“${years+1}”为内嵌表达式,内嵌表达式的
    值作为字符串模板内容。
    字符串由一个个的字符元素组成,ArkTS中提供了一些方法和属性对字符串进行操
    作。表3.1中以letdetail="HelloWorld!"和letinfo="helloWorld!"为例介绍字符串
    的常用操作方法和属性。
    表3.1 字符串常用操作方法和属性功能说明
    代 码功能说明返 回 值
    detail.length 返回detail的长度12
    detail[6] 返回detail中第7个字符(元素下标为6) W
    detail.charAt(6) 返回detail中第7个字符(元素下标为6) W
    detail.concat(info) 连接两个或更多个字符串,并返回新的字符串HelloWorld! helloWorld!
    detail.indexOf("l") 返回“l”在detail中首次出现的位置2
    detail.lastIndexOf("o") 返回“o”在detail中最后一次出现的位置7
    detail.split("") 返回detail根据“”分隔的子字符串数组[Hello,World!]
    detail.substring(0,3) 返回detail中0(含)~3(不含)索引号之间的字符Hel
    detail.toLowerCase() 把detail转换为小写helloworld!
    detail.toUpperCase() 把detail转换为大写HELLO WORLD!
    3.布尔类型
    布尔类型(boolean)的数据表示逻辑值true(真)和false(假)。
    4.数组类型
    数组(array)是一个可以容纳多个数据的容器,容器中每个数据称为数组元素,每个数
    组元素按顺序存储在一串连续的内存空间中,数组的长度由数组中元素的个数确定,数组中
    第一个元素的索引下标为0。声明变量为数组的语法格式如下。
    1 let 数组名:数组类型[] //声明数组变量
    2 数组名=[元素1,元素2,…] //初始化数组元素
    2 9
    或者直接在声明时初始化数组元素。
    1 let 数组名:数组类型[] =[元素1,元素2,…] //声明数组变量,并初始化数组元素
    【例3-4】 下列代码表示声明一个能够存放班级平均分的avgs数组,班级平均分分别
    为87、79、73、85、65。
    1 let avgs: number[]
    2 avgs =[87, 79, 73, 85, 65]
    上述两行代码也可以用如下代码替换,即直接在声明数组变量时初始化数组元素。
    1 let avgs: number[] =[87, 79, 73, 85, 65]
    上述“avgs:number[]”表示avgs数组元素的数据类型必须为number。如果不能确定
    数组元素的类型,也可以用如下代码声明avgs数组。
    1 let avgs =[87, 79, 73, 85, 65]
    例如,下列代码表示定义一个info数组,该数组中可以包括number、boolean、string类
    型的数组元素。
    1 let info =[87,73, 85, 65,true,"key"]
    也可以使用数组泛型声明数组,语法格式如下。
    1 let 数组名:Array<数组类型>=[元素1,元素2,…]
    例如,例3-3中的avgs数组也可以用如下代码声明。
    1 let avgs:Array=[87, 79, 73, 85, 65]
    ArkTS中提供了一些方法和属性对数组进行操作。表3.2中以letarr1:number[]=
    [1,2,3,1]和letarr2:string[]= ["a","b","c","d"]为例介绍数组的常用操作方法和
    属性。
    表3.2 数组常用操作方法和属性功能说明
    代 码功能说明返 回 值
    arr1.length 返回arr1的长度4
    arr1.indexOf(1,2) 在arr1中从索引号2开始搜索“1”,并返回它所
    在的位置。若返回值为-1,则表示没有搜索到3
    arr1.join("+") 将数组的所有元素组成一个字符串,元素间用
    “+”连接1+2+3+1
    arr1.pop() 删除arr1的最后一个元素并返回删除的元素1
    arr1.push(12) 向arr1的末尾添加一个或更多个元素,并返回新
    的长度5
    arr1.reverse() 将arr1数组元素的顺序反转1,3,2,1
    arr1.sort() 对arr1数组元素升序排序1,1,2,3
    arr1.shift() 删除arr1的第一个元素并返回删除的元素1
    arr1.slice(1,3) 返回arr1中1(含)~3(不含)索引号之间的元素2,3
    续表
    30
    代 码功能说明返 回 值
    arr1.splice(1,2) 删除arr1中从索引号1开始的两个数组元素,并
    返回删除的数组元素2,3
    arr1.unshift(10) 向arr1的开头添加一个或更多个元素,并返回新
    的长度5
    arr1.map(Math.sqrt) 通过指定函数处理数组的每个元素,并返回处理
    后的数组1,1.4142135623730951,
    1.7320508075688772,1
    5.枚举类型
    枚举类型(enum)是预先定义的一组命名值的值类型,其中,命名值又称为枚举常量。
    使用枚举常量时必须以枚举类型名称为前缀。
    【例3-5】 下列代码表示声明一个存放茶叶名称的枚举类型值,并给福建产的茶叶
    赋值。
    1 enum teaNames {"龙井", "碧螺春", "铁观音", "毛峰", "大红袍"}
    2 let fujianTea =teaNames.大红袍 //福建产茶叶
    3 console.log("福建产茶叶:", fujianTea) //输出:福建产茶叶:4
    6.void类型
    void类型用于指定函数没有返回值,该类型只有一个void值。由于void是引用类型,
    所以它可以用于泛型类型参数。
    7.Object类型
    Object类型是所有引用类型的基类型。任何值都可以直接被赋给Object类型的变量。
    例如,下列代码编译不会报错。
    1 let title: Object
    2 title =102211 //102211 为number 类型
    3 title ="102211" // "102211"为string 类型
    8.联合类型
    联合类型(Union)是由多个类型组合成的引用类型。联合类型包含变量可能的所有类
    型。联合类型的语法格式如下。
    1 type 联合类型名=数据类型1|数据类型2|…
    【例3-6】 定义一个可以存放number和string类型数据的联合类型,并声明一个该联
    合类型变量,实现代码如下。
    1 type msgType =number|string
    2 let msg:msgType
    3 msg ="kate" //string 类型
    4 msg =124 //number 类型
    5 msg =true //boolean 类型,报错
    上述第1行代码定义msgType为联合类型,该类型可以包含number和string类型;
    第2行代码声明一个msgType类型的msg变量。
    31
    3.3
    运算符
    1.
    运算符是对包括数值或变量在内的操作数执行操作的特殊字符,ArkTS 语言中包括算
    术运算符、比较运算符、逻辑运算符、位运算符和赋值运算符,不同的运算符应用于不同的开
    发场景。使用运算符、常量和变量等可以组成表达式,同一个表达式中的运算符在运算时有
    先后顺序(优先级), 通常情况下,算术运算符的优先级高于关系运算符,关系运算符的优先
    级高于逻辑运算符。
    1.
    算术运算符
    算术运算符用于执行基本的数学运算,使用算术运算符、常量和变量等可以组成算术表
    达式。表3.eta=4和letb=rkTS 语言支持的算术运算符及功能。
    3中以l5介绍A
    表3.算术运算符及功能说明
    3
    运算符功能说明示例表达式表达式的值
    + 加法a+b 9
    -减法a-b -1
    * 乘法a*b 20
    / 除法a/b 0.8
    % 取模(余数) a%b 4
    ++ 自增++a 5(a的值为5)
    a++ 4(a的值为5)
    自减b 4(b的值为4)
    b5(b的值为4)
    2.
    比较运算符
    比较运算符用于对操作数与操作数之间进行关系比较,使用关系运算符、常量和变量等
    可以组成比较表达式,比较表达式的值只能为true或fals4中以leta=4 和letb=5
    e。表3.
    介绍ArkTS 语言支持的比较运算符及功能。
    表3.比较运算符及功能说明
    4
    运算符功能说明示例表达式表达式的值
    > 大于a>b false
    < 小于a    >= 大于或等于a>=b false
    <= 小于或等于a<=b true
    == 等于a==b false
    ! = 不等于a! =b true
    3.
    逻辑运算符
    逻辑运算符用于判断操作数之间的关系,使用逻辑运算符、常量和变量等可以组成逻辑
    32
    表达式。表3.5中以leta=4和letb=5介绍ArkTS语言支持的逻辑运算符及功能。
    表3.5 逻辑运算符及功能说明
    运算符功能说明示例表达式表达式的值
    && 与操作。如果所有表达式都为true,则返回true (a>0)&& (b>1) true
    || 或操作。如果任何表达式为true,则返回true (a>b)||(b>10) false
    ! 取反操作。true取反为false,false取反为true ! (a==b) true
    4.位运算符
    位运算是对位模式按位或二进制数的一元和二元操作。表3.6中以leta=4和letb=
    5介绍ArkTS语言支持的逻辑运算符及功能。
    表3.6 位运算符及功能说明
    运算符功能说明示例表达式表达式的值
    & 按位与:如果两个操作数的对应位都为1,则将这个位设置为1,
    否则设置为0 a&b 4
    | 按位或:如果两个操作数的相应位中至少有一个为1,则将这个位
    设置为1,否则设置为0 a|b 5
    ~ 按位非:反转操作数的位~a -5
    ^ 按位异或:如果两个操作数的对应位不同,则将这个位设置为1,
    否则设置为0 a^b 1
    << 左移:a<    >> 算术右移:a>>b表示将a的二进制向右移b位,带符号扩展a>>1 2
    >>> 逻辑右移:a>>>b表示将a的二进制向右移b位,左边补0 a>>>1 2
    5.赋值运算符
    赋值运算符用于将值赋给一个变量,值的分配从右到左。表3.7中以leta=4和letb=
    5介绍ArkTS语言支持的赋值运算符及功能。
    表3.7 赋值运算符及功能说明
    运 算 符功能说明示例表达式等价表达式a的值
    = 赋值a=b a=b 5
    += 相加和赋值a+=b a=a+b 9
    -= 相减和赋值a-=b a=a-b -1
    *= 相乘和赋值a*=b a=a*b 20
    /= 相除和赋值a/=b a=a/b 0.8
    %= 取模(余数)和赋值a%=b a=a%b 4
    6.其他运算符
    1)三元运算符
    三元运算符(?:)也称为条件表达式,它包含三个操作数,并且需要判断布尔表达式的
    3 3
    值。该运算符主要是决定哪个值应该赋值给变量。例如,求两个数中较大的数可以用如下
    代码实现。
    1 let a =4
    2 let b =5
    3 let r =a >b ? a : b
    2)类型运算符
    类型运算符(typeof)是一元运算符,返回操作数的数据类型。例如,输出a变量的数据
    类型可以用如下代码实现。
    1 console.log("a 的数据类型为:", typeof a)
    3.1.4 控制流程
    所有程序设计语言在设计程序时都包括顺序结构、条件分支(选择)结构和循环(重复)
    结构。顺序结构是最简单的程序结构,也是最常用的程序结构,程序员按照解决问题的顺序
    写出相应的语句,程序执行时按照自上而下的顺序依次执行,其执行流程如图3.1所示。条
    件分支结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个
    分支执行,条件分支结构有单分支、双分支和多分支三种形式,双分支结构的执行流程如
    图3.2所示。循环结构是指在程序中需要反复执行某个功能,它根据循环体中的条件判断是
    继续执行某个功能,还是退出循环。根据判断条件,循环结构又分为当型循环和直到型循
    环,当型循环的执行流程如图3.3所示。
    图3.1 顺序结构 图3.2 条件分支结构 图3.3 循环结构
    1.条件分支结构
    条件分支结构用条件语句实现,ArkTS语言中包括以下4种条件语句。
    1)if语句
    if语句由布尔表达式及代码块组成,其语法格式如下。
    1 if (布尔表达式) {
    2 代码块
    3 }
    if语句表示如果布尔表达式的值为true,则执行代码块。
    【例3-7】 产生一个10~100的随机整数,如果该随机整数为偶数,则输出“产生的随机
    34
    数是偶数”。实现代码如下。
    1 let range =100 -10
    2 let rnd =Math.floor(Math.random()*range)+10
    3 if (rnd%2 ==0) {
    4 console.log("rand:",`产生的随机数${rnd}是偶数` )
    5 }
    2)if…else语句
    if…else语句由if语句及else语句组成,其语法格式如下。
    1 if (布尔表达式) {
    2 代码块1
    3 } else {
    4 代码块2
    5 }
    if…else语句表示如果布尔表达式的值为true,则执行代码块1,否则执行代码块2。例
    如,在例3-7的基础上,如果该随机数为奇数,则输出“产生的随机数是奇数”。实现代码
    如下。
    1 if (rnd%2 ==0) {
    2 console.log("rand:",`产生的随机数${rnd}是偶数` )
    3 } else {
    4 console.log("rand:",`产生的随机数${rnd}是奇数` )
    5 }
    3)if…elseif…else语句
    if…elseif…else语句在执行多个判断条件时很有用,其语法格式如下。
    1 if(布尔表达式1) {
    2 代码块1
    3 } else if(布尔表达式2 ) {
    4 代码块2
    5 } else {
    6 代码块3
    7 }
    if…elseif…else语句表示如果布尔表达式1的值为true,则执行代码块1;如果布尔表
    达式2的值为true,则执行代码块2,否则执行代码块3。
    【例3-8】 产生一个-100~100的随机整数x,如果x>0,则输出“x>0”;如果x=0,
    则输出“x=0”;如果x<0,则输出“x<0”。实现代码如下。
    1 let range =100 -(-100)
    2 let rnd =Math.floor(Math.random() * range) +(-100)
    3 if (rnd >0) {
    4 console.log("rand:", `${rnd}>0`)
    5 } else if (rnd ==0) {
    6 console.log("rand:", `${rnd}=0`)
    7 } else {
    8 console.log("rand:", `${rnd}<0`)
    9 }
    3 5
    4)switch语句
    switch语句用来选择多个代码块中某一个代码块执行,也就是执行与switch表达式值
    匹配的代码块。其语法格式如下。
    1 switch(表达式){
    2 case 常量值1:
    3 代码块1
    4 break //可选
    5 case 常量值2 :
    6 代码块2
    7 break //可选
    8 …
    9 default : //可选
    10 代码块n
    11 }
    当被测试的表达式值等于某case中的常量值时,该case后跟的语句将被执行,直到遇
    到break语句为止;当遇到break语句时,switch终止,控制流将跳转到switch语句后的下
    一行。default表示当表达式的值与所有case中的常量值都不匹配时执行的代码块。如果
    case语句不包含break,控制流将会继续执行后续的case,直到遇到break为止。
    【例3-9】 产生一个随机整数week(week代表星期几),根据week值判断主食内容,周
    一、周三、周五吃面条;周二、周四、周六吃米饭;周日吃馒头。实现代码如下。
    1 let range =8 -1
    2 let week =Math.floor(Math.random() * range) +1
    3 switch (week) {
    4 case 1:
    5 case 3:
    6 case 5:
    7 console.log("info", `周${week}吃面条`)
    8 break
    9 case 2:
    10 case 4:

最近浏览过的书籍