HarmonyOS编程语言介绍
坚果:润开鸿数字科技有限公司技术专家,华为开发者专家(HUAWEI Developer Experts),OpenHarmony布道师,OpenHarmony校源行开源大使,InfoQ签约作者,CSDN博客专家,51CTO博客专家,阿里云博客专家,电子发烧友社区之星,开发者学堂”十佳“讲师。在“战码先锋”二期活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入,自己累计贡献1.5w行代码。
1.编程语言介绍
ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。在本课程中对于ArkTS,TypeScript,JavaScript的关系也做了梳理。
TypeScript是JavaScript的超集,ArkTS则是TypeScript的超集,他们的关系如下图所示:
2. TypeScript快速入门
TypeScript支持一些基础的数据类型,如布尔型、数组、字符串等,
布尔值
TypeScript中可以使用boolean来表示这个变量是布尔值,可以赋值为true或者false。
let isDone: boolean = false;
字符串
TypeScript里使用 string表示文本数据类型, 可以使用双引号( ")或单引号(')表示字符串。
let name: string = "坚果";
数组
TypeScrip有两种方式可以定义数组。 第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组。
let list: number[] = [1, 2, 3];
元组
TypeScript 提供了元组来表示已知元素数量和类型的数组,元组内的各元素的类型不必相同,但是对应位置的类型必须一致。
let user: [string, number, string]; // 定义一个元组
user = ["坚果", 25, '兰州'];
enum
TypeScript 提供了 enum
关键字表示枚举类型,枚举类型主要用于定义数值的集合。
enum Color { // 定义一个枚举
Red,
Green,
Blue
}
let c: Color = Color.Blue; // 定义枚举类型
Void
TypeScript 提供了 void
关键字表示函数的返回类型为空,也就是函数没有返回值。
function test(): void {
console.log('This is function is void');
}
undefined
TypeScript 提供了 undefined
关键字表示声明了一个变量但并没有赋值的情况。
let data;
联合类型
TypeScript 允许通过 |
将一个变量设置成多种类型,赋值的时候可以根据设置的类型来赋值。
let data: string | number; // 设置data为联合类型
data = '坚果'; // 正确
data = 25; // 正确
3. 条件语句
条件语句用于基于不同的条件来执行不同的动作。TypeScript 条件语句是通过一条或多条语句的执行结果(True 或 False)来决定执行的代码块。
这部分和其他编程语言类似,主要有if 语句,if...else 语句,if...else if....else 语句,switch…case 语句。不做过多学习
4 函数
函数就是包裹在花括号中的代码块,前边使用 function
关键字,语法格式如下:
function function_test() {
// 执行代码
}
例如声明函数如下:
function log() { // 声明一个函数
console.log(“坚果”); // 代码块
}
函数调用
函数只有通过调用才可以执行函数内的代码,语法格式如下:
function_test()
函数返回值
如果希望得到函数的执行结果,可以使用 return
语句,语法如下:
function function_test(): return_type {
return value; // return语句
}
上面是函数的基础,此外还有
可选参数
语法:
function func_name(param1: paramType, param2?: paramType) {
}
举例:
function buildName(firstName: string, age?: number) {
if (lastName)
return firstName + ' ' + lastName;
else
return firstName;
}
let result1 = buildName('坚果');
let result2 = buildName('坚果', 25);
剩余参数
剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 可以使用省略号( ...)进行定义:
语法:
function func_name(param1: paramType, param2: paramType, ...params: paramType[]) {
}
举例
function getEmployeeName(firstName: string, ...restOfName: string[]) {
return firstName + ' ' + restOfName.join(' ');
}
let employeeName = getEmployeeName('坚果', '组织', '专注于', 'HarmonyOS布道');
箭头函数
ES6版本的TypeScript提供了一个箭头函数,它是定义匿名函数的简写语法,用于函数表达式,它省略了function关键字。箭头函数的定义如下,其函数是一个语句块:
( [param1, parma2,…param n] )=> {
<span>// 代码块</span>
}
其中,括号内是函数的入参,可以有0到多个参数,箭头后是函数的代码块。我们可以将这个箭头函数赋值给一个变量,
5 类
TypeScript支持基于类的面向对象的编程方式,定义类的关键字为 class,后面紧跟类名。类描述了所创建的对象共同的属性和方法。
类的定义
class class_name {
// 类作用域
}
举例:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
info(): string {
return `My name is ${this.name} and age is ${this.age}`;
}
}
创建类对象
类定义完后,可以通过 new
关键字实例化一个类的对象,实例化类对象即调用类的构造方法,语法如下
let object_name = new class_name([ args ])
类的继承
TypeScript 支持继承类,创建类的时候可以使用关键字 extends
继承一个已有的类,这个已有的类称为父类,继承它的类称为子类。子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承。语法如下:
class Employee extends Person {
department: string
constructor(name: string, age: number, department: string) {
super(name, age);
this.department = department;
}
public getEmployeeInfo(): string {
return this.info() + ` and work in ${this.department}`;
}
}
通过上面的Employee类,我们可以定义一个人物坚果,这里可以获取他的基本信息,也可以获取他的雇主信息,其定义如下:
let person2 = new Employee('坚果', 25, '润开鸿');
person2.info();
person2.getEmployeeInfo();
访问修饰符
TypeScript 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。TypeScript 支持 3 种不同的访问权限。
- public(默认) :公有,可以在任何地方被访问。
- protected:受保护,可以被其自身以及其子类访问。
- private:私有,只能被其定义所在的类访问。
class Person {
name: string;
private age: number; // age为private,外界无法访问
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
info(): string {
return `My name is ${this.name} and age is ${this.age}`;
}
}
var person = new Person('jianguo', 25);
console.log(person.name); // harmony
console.log(person.age.toString()); // 编译报错,age为private
6 模块
随着应用越来越大,通常要将代码拆分成多个文件,即所谓的模块(module)。模块可以相互加载,并可以使用特殊的指令 export 和 import 来交换功能,从另一个模块调用一个模块的函数。
两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。
7 迭代器
当一个对象实现了Symbol.iterator属性时,我们认为它是可迭代的。一些内置的类型如Array,Map,Set,String,Int32Array,Uint32Array等都具有可迭代性。
let list = [4, 5, 6];
for (let i in list) {
console.log(i); // "0", "1", "2",
}
for (let i of list) {
console.log(i); // "4", "5", "6"
}
总结
本文我们跟随课程简单介绍了 TS 基础语法部分,掌握这些基础部分可以支撑日常简单应用开发了。查看更多,可以在参考TypeScript的官方教程(www.typescriptlang.org/docs/)
TypeScript快速入门developer.huawei.com/consumer/cn…
构建列表面
developer.huawei.com/consumer/cn…
页签切换
developer.huawei.com/consumer/cn…