首页 > 其他分享 >鸿蒙HarmonyOS(ArkTS基础-1)

鸿蒙HarmonyOS(ArkTS基础-1)

时间:2024-11-05 12:17:38浏览次数:5  
标签:语句 ArkTS string 鸿蒙 操作数 运算符 HarmonyOS let 类型

文章目录

Harmony OS 鸿蒙开发

(本文档是在鸿蒙开发者文档的基础上,选取了最常用的一些关键语法,以及一些注释,可以帮助一些有前端/ios/Android开发经验的小伙伴快速掌握鸿蒙开发,本文档持续更新中…)

ArkTS 语言

1.初识ArkTS 语言

a.ArKTS是什么

ArKTs是Harmony OS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和性能。

(就是在TS的基础上增加了一些新的特性)

b.ArkTS的编程规范

​ 1.类采用首字母大写的驼峰命名法,类名通常是名词或名词短语,例如Person、Student、Worker。

// 类名
class User {
  username: string

  constructor(username: string) {
    this.username = username;
  }

  sayHi() {
    console.log('hi' + this.username);
  }
}

// 枚举名
enum UserType {
  TEACHER = 0,
  STUDENT = 1
};

​ 2.函数的命名通常是动词或动词短语,采用小驼峰命名

let msg = 'Hello world';

function sendMsg(msg: string) {
  // todo send message
}

let userName = 'Zhangsan';

function findUser(userName: string) {
  // todo find user by user name
}

​ 3.常量名、枚举值名采用全部大写,单词间使用下划线隔开

const MAX_USER_SIZE = 10000;

enum UserType {
  TEACHER = 0,
  STUDENT = 1
};

4.避免使用否定的布尔变量名

//错误命名
let isNoError = true;
let isNotFound = false;

function empty() {}
function next() {}
//正确命名
let isError = false;
let isFound = true;

function isEmpty() {}
function hasNext() {}

5.使用空格缩进,禁止使用tab字符

6.多个变量定义和赋值语句不允许写在一行

//反例
let maxCount = 10, isCompleted = false;
let pointX, pointY;
pointX = 10; pointY = 0;
//正确写法
let maxCount = 10;
let isCompleted = false;
let pointX = 0;
let pointY = 0;

7.数组遍历优先使用Array对象方法***

对于数组的遍历处理,应该优先使用Array对象方法,如:forEach(), map(), every(), filter(), find(), findIndex(), reduce(), some()。

//反例
const numbers = [1, 2, 3, 4, 5];
// 依赖已有数组来创建新的数组时,通过for遍历,生成一个新数组
const increasedByOne: number[] = [];
for (let i = 0; i < numbers.length; i++) {
  increasedByOne.push(numbers[i] + 1);
}
//正确写法
const numbers = [1, 2, 3, 4, 5];
// better: 使用map方法是更好的方式
const increasedByOne: number[] = numbers.map(num => num + 1);

8.不要在控制性条件表达式中执行赋值操作

控制性条件表达式常用于if、while、for、?:等条件判断中。

在控制性条件表达式中执行赋值,常常导致意料之外的行为,且代码的可读性非常差。

//反例
// 在控制性判断中赋值不易理解
if (isFoo = false) {
  ...
}
//正确写法
const isFoo = someBoolean; // 在上面赋值,if条件判断中直接使用
if (isFoo) {
  ...
}

9.使用T[]表示数组类型

ArkTS提供了两种数组类型的表示方式:T[]和Array。为了代码的可读性,建议所有数组类型均用T[]来表示。

//反例
let x: Array<number> = [1, 2, 3];
let y: Array<string> = ['a', 'b', 'c'];
// 统一使用T[]语法
let x: number[] = [1, 2, 3];
let y: string[] = ['a', 'b', 'c'];

。。。。

c.从Ts到ArkTS的注意点

背景:

动态类型语言,例如JavaScript(简称JS),可以使得开发者非常快速地编写代码,但是同时,它也使得程序容易在运行时产生非预期的错误。例如在代码中,如果开发者没有检查一个值是否为undefined,那么程序有可能在运行时崩溃,给开发者造成不便。如果能在代码开发阶段检查此类问题是更有好处的。TS通过标注类型帮助开发者检查错误,许多错误在编译时可以被编译器检测出来,不用等到程序运行时。但是,即使是TS也有局限性,它不强制要求对变量进行类型标注,导致很多编译时检查无法开展。ArkTS尝试克服这些缺点,它强制使用静态类型,旨在通过更严格的类型检查以减少运行时错误

1.显式初始化类的属性

//非严格模式下的TS代码。
class Person {
  name: string // 可能为undefined
  
  setName(n: string): void {
    this.name = n
  }
  
  getName(): string {
  // 开发者使用"string"作为返回类型,这隐藏了name可能为"undefined"的事实。
  // 更合适的做法是将返回类型标注为"string | undefined",以告诉开发者这个API所有可能的返回值的类型。
    return this.name
  }
}

let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 运行时异常:name is undefined

//由于ArkTS要求属性显式初始化,代码应该像下面这样写。
class Person {
  name: string = ''//显式声明
  
  setName(n: string): void {
    this.name = n
  }
  
  // 类型为"string",不可能为"null"或者"undefined"
  getName(): string {
    return this.name
  }
}

let buddy = new Person()
// 假设代码中没有对name的赋值,例如没有调用"buddy.setName('John')"
buddy.getName().length; // 0, 没有运行时异常

。。。。

2.ArkTS的基本语法

a.声明

1.变量声明

let hi: string = 'hello';
hi = 'hello, world';

2.常量声明

const hello: string = 'hello';

3.自动类型推断

let hi1: string = 'hello';
let hi2 = 'hello, world';
b.类型

1.Number类型

2.Boolean类型

3.String类型

4.Void类型

5.Object类型 (Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量 )

let x:object = new  Number(1)

6.Array类型

7.Enum类型

enum ColorSet { Red, Green, Blue }
let c: ColorSet = ColorSet.Red;
console.log('枚举',JSON.stringify(c) )
// 枚举 {"0":"Red","1":"Green","2":"Blue","Red":0,"Green":1,"Blue":2}
enum ColorSet { White = 0xFF, Grey = 0x7F, Black = 0x00 }
let c: ColorSet = ColorSet.Black;
console.log('枚举',c)
// 枚举 0(16进制)

8.Union类型

class Cat {
  name: string = 'cat';
  // ...
}
class Dog {
  name: string = 'dog';
  // ...
}
class Frog {
  name: string = 'frog';
  // ...
}
type Animal = Cat | Dog | Frog | number;
// Cat、Dog、Frog是一些类型(类或接口)

let animal: Animal = new Cat();
animal = new Frog();
animal = 42;
// 可以将类型为联合类型的变量赋值为任何组成类型的有效值
c.运算符

1.赋值运算符

赋值运算符=,使用方式如x=y。

复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y。

复合赋值运算符列举如下:+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、|=、^=。

2.比较运算符

运算符说明
===如果两个操作数严格相等(对于不同类型的操作数认为是不相等的),则返回true。
!==如果两个操作数严格不相等(对于不同类型的操作数认为是不相等的),则返回true。
==如果两个操作数相等,则返回true。
!=如果两个操作数不相等,则返回true。
>如果左操作数大于右操作数,则返回true。
>=如果左操作数大于或等于右操作数,则返回true。
<如果左操作数小于右操作数,则返回true。
<=如果左操作数小于或等于右操作数,则返回true。

3.算术运算符

一元运算符为-、+、–、++。

二元运算符列举如下:

运算符说明
+加法
-减法
*乘法
/除法
%除法后余数

4.位运算符

运算符说明
a & b按位与:如果两个操作数的对应位都为1,则将这个位设置为1,否则设置为0。
a | b按位或:如果两个操作数的相应位中至少有一个为1,则将这个位设置为1,否则设置为0。
a ^ b按位异或:如果两个操作数的对应位不同,则将这个位设置为1,否则设置为0。
~ a按位非:反转操作数的位。
a << b左移:将a的二进制表示向左移b位。
a >> b算术右移:将a的二进制表示向右移b位,带符号扩展。
a >>> b逻辑右移:将a的二进制表示向右移b位,左边补0。

5.逻辑运算符

运算符说明
a && b逻辑与
a || b逻辑或
! a逻辑非
d.语句

1.if语句

2.Switch语句

switch (expression) {
  case label1: // 如果label1匹配,则执行
    // ...
    // 语句1
    // ...
    break; // 可省略
  case label2:
  case label3: // 如果label2或label3匹配,则执行
    // ...
    // 语句23
    // ...
    break; // 可省略
  default:
    // 默认语句
}

3.条件表达式

condition ? expression1 : expression2
如果condition的为真值(转换后为true的值),则使用expression1作为该表达式的结果;否则,使用expression2。

4.For语句

5.For-of语句

使用for-of语句可遍历数组或字符串。示例如下:
for (let ch of 'a string object') {
  /* process ch */
}

6.While语句

7.Do-while语句

如果condition的值为真值(转换后为true的值),那么statements语句会重复执行。示例如下:
do {
  statements
} while (condition)

8.Break语句 :使用break语句可以终止循环语句或switch。

9.Continue语句 :continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。

10.Throw和Try语句

---------------------------------------------------第一次更新完毕-----------------------------------------

}


6.**While语句** 

[^非常简单不用举例]: 

7.**Do-while语句** 

如果condition的值为真值(转换后为true的值),那么statements语句会重复执行。示例如下:
do {
statements
} while (condition)


8.**Break语句** :使用break语句可以终止循环语句或switch。 

9.**Continue语句** :continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。 

10.**Throw和Try语句** 

---------------------------------------------------第一次更新完毕-----------------------------------------

#### e.函数

标签:语句,ArkTS,string,鸿蒙,操作数,运算符,HarmonyOS,let,类型
From: https://blog.csdn.net/weixin_67448099/article/details/143425034

相关文章