3. ArkTS语法介绍(已完结)

零、写在最前

各位看官,由于官方教程对ArkTS的讲解非常概略,且对于TypeScript的基础语法没有任何介绍。这样对于之前没有接触过TypeScript开发的小伙伴造成了不小的困难。

所以,我准备基于黑马程序员在B站上上传的课程——《HarmonyOS NEXT星河版零基础入门到实战》(P02-10),对于这一部分的知识进行补充。本文档我会添加我认为重要的补充知识内容,并逐步整理完善,恳请各位看官耐心等待

当全部更新已完成时,我会在标题上明确写出:(已完结)字样。只要还在更新,就是(正在持续更新中……)。

一、课程笔记

1.0 基础快速入门

对于一个合格的开发人员来说,遇到不清楚的技术点,一定要养成一个经常翻阅官方文档的好习惯。在华为开发者联盟的官网中的开发者文档中,有对于ArkTS语法的介绍。详见后面传送门:《初识ArkTS语言

 1.1 认识和存储数据

变量:用来存储会发生变化的数据;

常量:用来存储不会发生变化的数据

// 变量的存储和修改
// 1. 变量的存储
// 1.1 字符串 string类型
let title: string = 'lorem'
// 打印验证
console.log('字符串 string', title);

// 1.2 数字 number类型
let age: number = 1
// 打印验证
console.log('数字 number', age);

// 1.3 布尔 boolean类型
let isMarried: boolean = true
// 打印验证
console.log('布尔 boolean', isMarried);


// 2. 变量的修改
// 2.1 字符串 string类型
title = 'test'
// 打印验证
console.log('字符串 string', title);

// 2.2 数字 number类型
age = 10
// 打印验证
console.log('数字 number', age);

// 2.3 布尔 boolean类型
isMarried = false
// 打印验证
console.log('布尔 boolean', isMarried);


// 3. 常量的存储
const  companyName: string = 'lorem'

1.2 常量和变量的命名规则

变量、常量的命名规则,简言之:

  • 变量名、常量名只能包含字母、数字、下划线、$,不能以数字开头
  • 不能使用内置关键字或保留字作为;
  • 变量名、常量名必须严格区分大小写
  • 建议:将变量名、常量名设置为一些名词或名词短语,并采用小驼峰命名,以便于理解其含义。

注意:关于这一部分知识,华为开发者联盟官网上有更进一步的建议,详见:《ArkTS编程规范》。

1.3 数组

let items: string[] = ['1', '2', '3', '4', '5']
// 打印验证
console.log('数组items', items)

1.4 函数

1.4.1 函数的基本使用

不使用函数输出3上述3组数据

// 1. 不是用函数,输出以下语句
console.log('测试输出', 1)
console.log('测试输出', 2)
console.log('测试输出', 3)
console.log('测试输出', 4)
console.log('测试输出', 5)

console.log('测试输出', 1)
console.log('测试输出', 2)
console.log('测试输出', 3)
console.log('测试输出', 4)
console.log('测试输出', 5)

console.log('测试输出', 1)
console.log('测试输出', 2)
console.log('测试输出', 3)
console.log('测试输出', 4)
console.log('测试输出', 5)

使用函数输出3上述3组数据,实现简化书写

// 2. 通过函数简化代码
// 2.1 定义函数
function test() {
  console.log('测试输出', 1)
  console.log('测试输出', 2)
  console.log('测试输出', 3)
  console.log('测试输出', 4)
  console.log('测试输出', 5)
}

// 2.2 调用函数(打印验证)
test()
test()
test()

 1.4.2 函数的完整写法

function test(call: number) {
  console.log(call.toString())
}

test(1)

1.4.3 箭头函数

箭头函数的本质上依然是函数。但它与普通函数的区别在于,它可用更简洁的函数书写方式去表达。

(1)无实参的情形
let test1 = () => {
  console.log('测试输出', 1)
  console.log('测试输出', 2)
  console.log('测试输出', 3)
  console.log('测试输出', 4)
  console.log('测试输出', 5)
}

test1()
(2)有实参的情形 
let test2 = (call: number) => {
  console.log(call.toString())
}

test2(1)

1.5 接口&对象

1.5.1 简述

对象是可以存放多个不同类型的数据的容器(区别于“数组”——数组元素必须为同类型),其作用是用于描述一个物体的特征和行为。物体的多个特征,应当使用多组属性名和其对应的属性值去指定。

1.5.2 对象的定义和使用

  • 通过定义接口(interface),约定对象结构类型
  • 基于接口,定义对象实例
  • 使用该对象实例,获取对象实例的属性值
  • 基于接口,可以定义多个对象实例(这些对象实例都具有相同的结构类型)
// 定义接口
interface Person {
  name: string
  age: number
  weight: number
}

// 基于接口,定义对象实例
let person: Person = {
  name: 'David',
  age: 18,
  weight: 60
}

// 使用该对象实例,获取对象实例的属性值
console.log('name:', person.name)
console.log('age:', person.age)
console.log('weight:', person.weight)

// 基于接口,可以定义多个对象实例(这些对象实例都具有相同的结构类型)
let person1:Person = {
  name:'XXX',
  age:17,
  weight:45
}

// 使用该对象实例,获取对象实例的属性值
console.log('name:', person1.name)
console.log('age:', person1.age)
console.log('weight:', person1.weight)

1.5.3 对象的方法

// 定义接口
interface Person {
  // 1. 定义方法的类型
  method1: () => void
  method2: (test: string) => void
}

// 基于接口,定义对象实例
let person: Person = {
  // 2. 基于方法的类型,定义对象的方法
  method1: () => {
    console.log('lorem1')
  },
  method2: (test: string) => {
    console.log('lorem2', test)
  }
}

// 3. 调用对象中的方法
person.method1()
person.method2('234')

1.6  联合类型

联合类型是一种灵活的数据类型,它修饰的变量可以被不同类型的数据赋值。

1.6.1 用不同类型的数据,给联合类型的变量赋值

let judge: number|string=100
console.log('final evaluation', judge);

judge='A'
console.log('final evaluation', judge);

1.6.2 将变量的值约定在一组数据范围内进行选择

let gender: 'man'|'woman'|'secret'='man'

1.7 枚举

枚举类型是一种特殊的数据类型,约定变量只能在一组数据范围内选择值。那么,这个功能有什么实际应用价值吗?当然!我们举个例子。

一个应用的设计师会告诉我们:APP的主题中,所有的主色都进行统一设置,这样界面将更协调。比如,对于以下颜色做了规范:

  • 红色(Red):#FF0F29
  • 橙色(Orange):#FF7100
  • 绿色(Green):#30B30E

这样的话,我们只需使用枚举类型中定义的Red就能统一代表#FF0F29这个颜色了。

// 1. 定义枚举(定义常量列表)
enum ThemeColor {
  Red = '#FF0F29',
  Orange = '#FF7100',
  Green = '#30B30E'
}

// 2. 给变量设定没类型
let color: ThemeColor = ThemeColor.Red
console.log('color', color);

注意,勤思考的小伙伴肯定有疑问:在1.6联合类型中,我们不是也能实现变量在某个范围内取值吗?如下面这段代码所示

let ThemeColor : '#FF0F29'|'#FF7100'|'#30B30E'='#FF0F29'

显然,这种表示方法虽然也可以,但是代码的可读性就太低了!不熟悉RGB的小伙伴,怎么能一眼看出来#FF0F29这个颜色,它代表什么颜色?所以联合类型在这里的使用效果就不如枚举类型优秀。

二、习题整理

2.1 判断题

1.  ArkTS中使用const声明常量。

答案:正确

2.  允许在容器组件内使用if/else条件渲染语句构建不同的子组件。

答案:正确

3.  ArkTS是HarmonyOS生态应用的开发语言,使用 .ets 作为ArkTS语言源码文件后缀。它在保持TypeScript (简称 TS )基本语法风格的基础上,对TS的动态类型特性施加更严格的约束。同时提供了声明式UI 、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发高性能应用。

答案:正确

2.2 单选题

1.  下面属于ArkTS中正确使用变量声明的语句是?

  • A. int a = 10;
  • B. var a = 10;
  • C. let a: number = 10;
  • D. number a = 10;

答案:C

2.  下面属于ArkTS函数声明的语句的是?

A. func printInfo(){};

B. def printInfo();

C. void printInfo(){};

D. function printInfo() {};

答案:D

3.  class类中的可见性修饰符不包括下面哪一个。

A. protected

B. public

C. protect

D. private

答案:C

4.  下列关于if/else条件渲染说法错误的是?

A. if、else if后跟随的条件语句不可以使用状态变量

B. 允许在容器组件内使用,通过条件渲染语句构建不同的子组件

C. 当父组件和子组件之间存在一个或多个if语句时,必须遵守父组件关于子组件使用的规则

D. 支持if、else和else if语句

答案:A

2.3 多选题

1.  下面示例中会导致编译报错的有?

A. let x: number = null;

B. let x: number | null = null;

C. let y: string = null;

D. let y: string = 100;

答案:ACD

2.  下面属于ArkTS基础类型的是?

A. string

B. boolean

C. number

D. Object

答案:ABC

3.  下面哪些属于属性方法?

A. fontSize()

B. onClick()

C. width()

D. height()

答案:ACD

三、心得体会

对于ArkTS的学习,需要一定的前驱知识储备

通过对于官方课程的学习,我的感触是它不适合对于TypeScript也是零基础的同学。特别是,当老师讲解到一些术语的时候,根本两眼一抹黑真的不知道。所以,我建议是,有条件稍微过一下TypeScript的语法,有了这个基础再回来听一下ArkTS,可能压力会小很多。

不妨举个例子吧。如下图所示,ArkTS中不支持any类型,并且也不支持在程序运行时,使用delete操作符去修改对象的布局,可TypeScript却支持上述这些操作。

综上,我认为学到这里可以是党暂停一下学习进度,适当参考网上的资源,补充一些稍微涉猎一下TypeScript的基础语法将会有更好的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值