首页 > 其他分享 >OpenHarmony—ArkTS不支持生成器函数

OpenHarmony—ArkTS不支持生成器函数

时间:2024-01-29 20:26:19浏览次数:27  
标签:OpenHarmony ArkTS log 生成器 number let arg foo

规则:arkts-no-generators

级别错误

目前ArkTS不支持生成器函数,使用async或await机制进行并行任务处理。

TypeScript

function* counter(start: number, end: number) {
  for (let i = start; i <= end; i++) {
    yield i;
  }
}

for (let num of counter(1, 5)) {
  console.log(num);
}

ArkTS

async function complexNumberProcessing(str: string): Promise<string> {
  // ...
  return str;
}

async function foo() {
  for (let i = 1; i <= 5; i++) {
    console.log(await complexNumberProcessing(i));
  }
}

foo()

使用instanceof和as进行类型保护
规则:arkts-no-is

级别错误

ArkTS不支持is运算符,必须用instanceof运算符替代。在使用之前,必须使用as运算符将对象转换为需要的类型。

TypeScript

class Foo {
  foo: string = ''
  common: string = ''
}

class Bar {
  bar: string = ''
  common: string = ''
}

function isFoo(arg: any): arg is Foo {
  return arg.foo !== undefined;
}

function doStuff(arg: Foo | Bar) {
  if (isFoo(arg)) {
    console.log(arg.foo);  // OK
    console.log(arg.bar);  // 编译时错误
  } else {
    console.log(arg.foo);  // 编译时错误
    console.log(arg.bar);  // OK
  }
}

doStuff({ foo: 123, common: '123' });
doStuff({ bar: 123, common: '123' });

ArkTS

class Foo {
  foo: string = ''
  common: string = ''
}

class Bar {
  bar: string = ''
  common: string = ''
}

function isFoo(arg: Object): boolean {
  return arg instanceof Foo;
}

function doStuff(arg: Object): void {
  if (isFoo(arg)) {
    let fooArg = arg as Foo;
    console.log(fooArg.foo);   // OK
    console.log(arg.bar);    // 编译时错误
  } else {
    let barArg = arg as Bar;
    console.log(arg.foo);    // 编译时错误
    console.log(barArg.bar);   // OK
  }
}

function main(): void {
  doStuff(new Foo());
  doStuff(new Bar());
}

部分支持展开运算符
规则:arkts-no-spread

级别错误

ArkTS仅支持使用展开运算符展开数组、Array的子类和TypedArray(例如Int32Array)。仅支持使用在以下场景中:

  1. 传递给剩余参数时
  2. 复制一个数组到数组字面量

TypeScript

function foo(x: number, y: number, z: number) {
  // ...
}

let args: [number, number, number] = [0, 1, 2];
foo(...args);

ArkTS

function log_numbers(x: number, y: number, z: number) {
  // ...
}

let numbers: number[] = [1, 2, 3];
log_numbers(numbers[0], numbers[1], numbers[2]);

TypeScript

let point2d = { x: 1, y: 2 };
let point3d = { ...point2d, z: 3 };

ArkTS

class Point2D {
  x: number = 0; y: number = 0
}

class Point3D {
  x: number = 0; y: number = 0; z: number = 0
  constructor(p2d: Point2D, z: number) {
    this.x = p2d.x;
    this.y = p2d.y;
    this.z = z;
  }
}

let p3d = new Point3D({ x: 1, y: 2 } as Point2D, 3);

class DerivedFromArray extends Uint16Array {};

let arr1 = [1, 2, 3];
let arr2 = new Uint16Array([4, 5, 6]);
let arr3 = new DerivedFromArray([7, 8, 9]);
let arr4 = [...arr1, 10, ...arr2, 11, ...arr3];

那么要想成为一名鸿蒙高级开发,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术,需要我们共同去探索。

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《OpenHarmony4.0&Next》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY
在这里插入图片描述

除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1.应用开发导读(ArkTS)

2.……
在这里插入图片描述

二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5........
在这里插入图片描述

三、如何快速入门?https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.……
在这里插入图片描述

四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……
在这里插入图片描述

五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY

标签:OpenHarmony,ArkTS,log,生成器,number,let,arg,foo
From: https://www.cnblogs.com/11usd/p/17995243

相关文章

  • OpenHarmony—ArkTS限制throw语句中表达式的类型
    规则:arkts-limited-throw级别:错误ArkTS只支持抛出Error类或其派生类的实例。禁止抛出其他类型(例如number或string)的数据。TypeScriptthrow4;throw'';thrownewError();ArkTSthrownewError();限制省略函数返回类型标注规则:arkts-no-implicit-return-types级别:错......
  • OpenHarmony 4.0的Rust开发
    OH4.0的Rust开发背景Rust是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust官方也使用Cargo工具来专门为Rust代码创建工程和构建编译。OpenHarmony为了集成C/C++代码和提升编译速度,使用了GN+Ninja的编译构建系统。GN的构建语言简洁......
  • OpenHarmony—不支持解构赋值
    规则:arkts-no-destruct-assignment级别:错误ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。TypeScriptlet[one,two]=[1,2];//此处需要分号[one,two]=[two,one];lethead,tail[head,...tail]=[1,2,3,4];ArkTSletarr:number[]=[1,2];......
  • OpenHarmony—仅允许在表达式中使用typeof运算符
    规则:arkts-no-type-query级别:错误ArkTS仅支持在表达式中使用typeof运算符,不允许使用typeof作为类型。TypeScriptletn1=42;lets1='foo';console.log(typeofn1);//'number'console.log(typeofs1);//'string'letn2:typeofn1lets2:typeofs1ArkTS......
  • OpenHarmony—类型转换仅支持as T语法
    规则:arkts-as-casts级别:错误在ArkTS中,as关键字是类型转换的唯一语法,错误的类型转换会导致编译时错误或者运行时抛出ClassCastException异常。ArkTS不支持使用语法进行类型转换。当需要将primitive类型(如number或boolean)转换成引用类型时,请使用new表达式。TypeScriptclassSha......
  • 您有一份OpenHarmony开发者论坛2023年度总结,请查收~
    2023年11月,OpenHarmony开发者论坛1.0版本正式上线。 感谢各位开发者对OpenHarmony的大力支持和热爱,成为OpenHarmony开发者论坛的第一批体验用户,并迅速在论坛开启了OpenHarmony技术交流。  通过开发者们在论坛进行提问、答疑、分享技术文章、技术资料等方式......
  • OpenHarmony—使用继承而非intersection type
    使用继承而非intersectiontype规则:arkts-no-intersection-types级别:错误目前ArkTS不支持intersectiontype,可以使用继承作为替代方案。TypeScriptinterfaceIdentity{id:numbername:string}interfaceContact{email:stringphoneNumber:string}type......
  • python中利用变量解压列表、元组、字符串、字典、文件对象、迭代器和生成器等序列
    一、如果知道序列中元素的个数,可以直接进行变量赋值。coords=(102,40)lon,lat=coordsprint(lon)print(lat)text="news"a,b,c,d=textprint(a)print(b)print(c)print(d)二、如果不知道序列中元素的个数,可以通过*变量名来代表多个元素的变量,无论序列是什......
  • python之生成器
    1.生成器优势节省空间:生成器按需生成值,避免了一次性加载所有数据到内存中。这对于处理大型数据集尤其重要。惰性计算:生成器支持惰性计算,只有在需要时才计算值。这在处理无限序列或需要动态生成数据的场景中非常有用。一次性使用:生成器通常是一次性的,一旦遍历完毕,就需要重新创......
  • OpenHarmony—TypeScript到ArkTS约束说明
    对象的属性名必须是合法的标识符规则:arkts-identifiers-as-prop-names级别:错误在ArkTS中,对象的属性名不能为数字或字符串。通过属性名访问类的属性,通过数值索引访问数组元素。TypeScriptvarx={'name':'x',2:'3'};console.log(x['name']);console.log(x[2]);ArkT......