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

期末考试复习总结-《ArkTS基础语法(上)》

一、知识点总结

1. ArkTS语言核心特性
  • 定位:专为移动设备设计的高性能编程语言,继承TypeScript语法并优化运行效率,减少动态类型开销。
  • 兼容性:与JavaScript无缝互通,支持TypeScript开发者平滑过渡。
2. 基础语法要素
  • 变量与常量
    • let声明可变变量,const声明只读常量,支持类型推断(如let hi2 = 'hello'自动推断为string)。
    • 所有字段必须在声明或构造函数中初始化,避免undefined
  • 数据类型
    • 基础类型:number(含大整数bigInt)、booleanstringvoidObject
    • 复合类型:array(如string[])、enum(枚举)、Union(联合类型,如Cat | Dog)、Aliases(类型别名)。
  • 运算符
    • 赋值运算符(=+=)、比较运算符(===>)、逻辑运算符(&&||)。
3. 语句与控制流
  • 条件语句if-elseswitch(需break终止分支)。
  • 循环语句forfor-of(遍历数组/字符串)、whiledo-while
  • 异常处理try-catch-finally,支持自定义错误类型。
4. 函数编程
  • 函数声明:需显式标注参数类型,返回类型可推断(如function add(x: string, y: string): string)。
  • 参数特性
    • 可选参数:通过?或默认值实现(如function hello(name?: string))。
    • Rest参数:...numbers: number[]接收不定长参数。
  • 函数式特性
    • 箭头函数:简洁语法(如(x: number, y: number) => x + y),隐式返回表达式。
    • 闭包:函数与声明环境组合,保留变量状态(如计数器闭包)。
  • 重载:同名函数不同参数签名,需匹配调用类型。
5. 面向对象编程
  • 类的定义
    • 字段初始化:name: string = '',构造函数需调用父类super()
    • 访问修饰符:public(公有)、private(私有)、protected(受保护,子类可访问)。
  • 继承与多态
    • 类通过extends继承父类,implements实现接口。
    • 抽象类:含abstract方法,不可实例化,子类必须实现抽象方法。
  • 接口:定义行为契约,类需实现接口所有方法。
6. 泛型编程
  • 泛型类/接口:参数化类型(如class CustomStack<Element>),确保类型安全。
  • 泛型约束:限制类型参数(如Key extends Hashable),确保具备特定方法。
  • 泛型函数:支持类型推断(如function last<T>(x: T[]): T)。
7. 空安全机制
  • 非空断言!断言变量非空(如a!.value),运行时为空抛异常。
  • 空值合并??运算符(如this.nick ?? '')。
  • 可选链?.安全访问属性(如this.spouse?.nick)。
8. 模块系统
  • 导出与导入
    • 静态导入:import { X, Y } from './module'import * as mod from './module'
    • 动态导入:import('./module').then(),按需加载。
  • HarmonyOS SDK导入
    • 方式:import UIAbility from '@ohos.app.ability.UIAbility'import { UIAbility } from '@kit.AbilityKit'

二、思维导图

在这里插入图片描述

三、模拟考试题

1. 单选题(10题×3分=30分)
  1. ArkTS的设计核心是( )
    A. 兼容Java
    B. 移动设备高性能
    C. 纯函数式编程
    D. 动态类型优先
    答案:B

  2. 以下属于ArkTS复合类型的是( )
    A. number
    B. Union
    C. boolean
    D. void
    答案:B

  3. 函数中用于接收不定长参数的是( )
    A. 可选参数
    B. Rest参数
    C. 必选参数
    D. 默认参数
    答案:B

  4. 类中只能在自身及子类访问的修饰符是( )
    A. public
    B. private
    C. protected
    D. internal
    答案:C

  5. 泛型约束使用的关键字是( )
    A. extends
    B. implements
    C. interface
    D. class
    答案:A

  6. 空值合并运算符是( )
    A. ??
    B. ?.
    C. !
    D. ||
    答案:A

    空值合并运算符(??)是用于处理可能为 null 或 undefined 的值,当左侧操作数为 null 或 undefined 时,返回右侧操作数,否则返回左侧操作数。例如,在 JavaScript 中,let result = a ?? b;,如果 a 是 null 或 undefined,result 就等于 b。其他选项,如?.是可选链操作符,用于安全地访问对象的属性,避免因对象为 null 或 undefined 而导致错误;!是逻辑非运算符;||是逻辑或运算符,虽然也能在一定程度上实现类似空值合并的功能,但它会在左侧操作数为 falsy 值(如 false、0、“”、null、undefined 等)时返回右侧操作数,而空值合并运算符只在左侧操作数为 null 或 undefined 时才返回右侧操作数。

  7. 以下关于ArkTS变量声明正确的是( )
    A. let x;
    B. const y: number = 10;
    C. var z: string = 'abc';
    D. let a: boolean;
    答案:B

    在 ArkTS(Ark TS 这里可能是鸿蒙操作系统相关的一种编程语言)中,对于变量声明:

    • 变量声明需要指定类型。选项 Alet x;没有指定类型,虽然在一些动态类型语言中这是允许的,但在有强类型要求的场景(如 ArkTS)中可能不符合要求。
    • 选项 B const y: number = 10;是正确的,它使用 const 关键字声明了一个常量 y,类型是 number,并且正确地初始化了它的值为 10。
    • 选项 C var z: string = ‘abc’;虽然指定了类型,但在ArkTS中通常更倾向于使用 let 或 const 而不是 var 来声明变量,因为 var 有更复杂的作用域规则(函数作用域)。
    • 选项 D let a: boolean;只是声明了一个变量 a,类型是 boolean,但没有进行初始化,在需要变量有初始值的场景下这可能不符合要求。而选项 B 既正确声明了变量类型,又进行了正确的初始化。
  8. 箭头函数的正确写法是( )
    A. function(x: number) => x+1
    B. (x: number): number = x+1
    C. (x: number) => { return x+1; }
    D. x => return x+1
    答案:C

  • 选项 A. function(x: number) => x+1
    解析:错误。这个写法混合了传统的函数声明语法(function 关键字)和箭头函数的语法(=>),这是不正确的。箭头函数不需要 function 关键字。
  • 选项 B. (x: number): number = x+1
    解析:错误。这个写法缺少箭头函数的关键部分,即箭头(=>)。正确的箭头函数需要使用 => 来分隔参数和函数体。
  • 选项 C. (x: number) => { return x+1; }
    解析:正确。这是一个标准的箭头函数写法。它包含参数列表 (x: number)、箭头 => 以及用大括号包裹的函数体 { return x+1; }。这种写法清晰且符合箭头函数的语法规范。
  • 选项 D. x => return x+1
    解析:错误。虽然这个写法看起来简洁,但多了一个 return 关键字。在箭头函数中,如果函数体是一个简单的表达式,可以直接写成 x => x+1,而不需要显式使用 return。如果使用大括号包裹函数体,则需要 return,如选项 C 所示。
  1. 抽象类的特点是( )
    A. 可直接实例化
    B. 包含抽象方法
    C. 不能被继承
    D. 无构造函数
    答案:B

  2. 动态导入模块的返回值类型是( )
    A. Promise
    B. Module
    C. Object
    D. void
    答案:A

2. 判断题(10题×1分=10分)
  1. ArkTS变量必须显式声明类型。( )
    答案:×(可类型推断)

  2. const声明的常量可在运行时修改。( )
    答案:×(只读)

  3. 接口可以包含方法实现。( )
    答案:×(仅声明)

  4. 泛型函数必须显式指定类型实参。( )
    答案:×(可推断)

  5. ?.是可选链运算符,用于安全访问属性。( )
    答案:√

  6. 抽象类的子类必须实现所有抽象方法。( )
    答案:√

  7. ArkTS不支持闭包特性。( )
    答案:×(支持)

  8. 模块中未导出的声明不可被外部访问。( )
    答案:√

  9. void类型函数必须返回null。( )
    答案:×(无返回值)

  10. 类的静态方法中可以使用this关键字。( )
    答案:×(仅限实例方法)

3. 简答题(4题×5分=20分)
  1. 简述ArkTS与TypeScript的主要区别。
    参考答案

    • ArkTS专为移动设备设计,优化运行效率,对TypeScript动态类型施加严格限制;
    • 支持与JavaScript无缝互通,TypeScript开发者可平滑过渡;
    • 所有字段必须初始化,空安全规则更严格。
  2. 说明@State装饰器的作用(结合文档内容)。
    参考答案

    • @State用于声明状态变量,其值变化时触发UI自动刷新;
    • 在ArkUI中,状态变量通过build()函数声明式驱动UI更新,是声明式UI的核心机制。
  3. 接口与抽象类的主要区别是什么?
    参考答案

    • 接口仅声明行为契约,无方法实现;抽象类可包含具体方法和抽象方法;
    • 类只能继承一个抽象类,但可实现多个接口;
    • 抽象类可包含构造函数,接口不可。
  4. 简述ArkTS空安全机制的三种核心操作。
    参考答案

    • 非空断言(!):强制转换可空类型为非空,运行时若为空抛异常;
    • 空值合并(??):左侧为null/undefined时取右侧值;
    • 可选链(?.):安全访问嵌套属性,避免空指针异常。

在编程语言中,尤其是支持空安全(null safety)机制的语言(如ArkTS),提供了一些操作符来安全地处理可能为nullundefined的值,以下是对ArkTS中三种核心空安全操作的更详细解析:

  1. 非空断言(!)
  • 用途:用于强制将一个可空类型(nullable type)转换为非空类型(non-nullable type)。这通常用于开发者确定某个值在运行时不会为nullundefined的场景。
  • 示例let x: string | null = null; let y: string = x!;(这里假设开发者确信x在运行时不会为null
  • 风险:如果被断言的值实际上为nullundefined,程序在运行时会抛出异常。因此,非空断言应谨慎使用,仅在开发者有充分理由确信值非空时使用。
  1. 空值合并(??)
  • 用途:提供了一种简便的方式为可能为nullundefined的值指定一个默认值。如果左侧操作数不为nullundefined,则结果为左侧值;否则,结果为右侧值。
  • 示例let result = x ?? 'default';(如果xnullundefinedresult将取值为'default'
  • 优势:可以避免冗长的条件判断,使代码更简洁易读,同时有效处理空值场景。
  1. 可选链(?.)
  • 用途:用于安全地访问对象的嵌套属性或调用方法,防止因链中的某个对象为nullundefined而导致的空指针异常。
  • 示例let value = obj?.prop?.subProp;(如果objobj.propnullundefined,整个表达式的结果将是undefined,而不会抛出异常)
  • 优势:简化了嵌套属性的访问逻辑,避免了多层if判断,使代码更简洁且更易维护。
4. 程序填空题(2题×10分=20分)

题目1:补全泛型函数,返回数组最后一个元素。

function last<T>(arr: T[]): T {return arr[______]; // 补全索引
}

答案arr.length - 1

题目2:补全类的构造函数,初始化nameage字段。

class Person {name: string = '';age: number = 0;constructor(n: string, a: number) {this.name = n;______; // 补全age初始化}
}

答案this.age = a

5. 编程题(2题×10分=20分)

题目1:编写一个箭头函数,接收两个数字参数,返回它们的和,并推断返回类型。
参考代码

let sum = (x: number, y: number) => x + y; // 隐式返回,类型推断为number

题目2:创建一个泛型类Stack,实现压栈和弹栈功能。
参考代码

class Stack<T> {private items: T[] = [];push(item: T): void {this.items.push(item);}pop(): T | undefined {return this.items.pop();}
}
// 使用示例
let stringStack = new Stack<string>();
stringStack.push('Hello');

评分要点:泛型类定义(<T>)、类型安全操作、方法实现。

相关文章:

  • G-Star公益行 | 公益组织入门开源技术,六月北京点燃改变的星火
  • Docker常用命令笔记
  • 【大模型】 使用llama.cpp 进行模型转换和量化
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(3)-起手奥义【袭】之突如其来
  • 使用 origin -> master 强制覆盖本地 master
  • Python Day47 学习(日志Day16-17复习)
  • Win11无法安装Unity5.5.0f3怎么解决?虚拟机中如何配置?Win7怎么安装最新版VMware Tools?来这里教你完美解决!
  • 函数02 day11
  • 模型参数、模型存储精度、参数与显存
  • python46
  • Code Composer Studio快捷键
  • 101.为AI知识问答寻找朗读合适API
  • 5G+边缘计算推动下的商品详情API低延迟高效率新方案
  • 第十一章 通用定时器(上篇)
  • 工业安全零事故的智能守护者:一体化AI智能安防平台
  • DSP——时钟树讲解
  • qt3d自定义生成mesh图形
  • AISHELL-5 全球首套智能驾舱中文语音交互数据集开源
  • 看板会议如何高效进行
  • 编程的本质难点:超越技术层面的五大核心障碍-优雅草卓伊凡
  • 做网站开发哪里可以接单/百度贴吧官网app下载
  • 安徽网站推广营销设计/seo整站优化服务
  • 电商类网站/网络营销公司哪家可靠
  • 上海设计网站设计/江苏搜索引擎优化公司
  • 昆山外贸型网站制作/怎么提升关键词的质量度
  • 网站怎么做搜索引擎/免费的网站推广方法