王学岗鸿蒙开发(北向)——————(三)基于新版本ArkTS核心语法

1,API版本11 和12与之前的版本差别很大

字符串的拼接

复制代码
function add(x:string,y:string):string{
  let z : string = '${x}${y}';
  return z;
}

函数默认值的写法

复制代码
function add(x:string,y:string = "asdf"):string{
  let z : string = '${x}${y}';
  return z;
}

参数多类型的写法

复制代码
function f6(x:number | string):void{
  
}

调用

复制代码
  f6("?asd")
    f6(10)

不确定参数传参

复制代码
function sum(...numbers:number[]):number{
  let result : number = 0;
  for(let i = 0;i<numbers.length;i++){
    result+= numbers[i];
  }
  return result
}

调用

复制代码
    //调用
    sum(1,2,3);
    sum(1,4)

不建议下面遍历循环的写法

for(let i of numbers){

}

箭头函数(lambda表达式)

复制代码
let add1 = (x:number,y:number):number=>{
  return x+y;
}
//省略返回值
let add2 = (x:number,y:number)=>{
  return x+y;
}
//省略return语句(只有一行代码的时候使用)
let add3 = (x:number,y:number)=> x+y;

type关键字

type定义函数类型

复制代码
//f1就是一个函数类型
type f1 = (x:number)=>number;
function doFunction(f:f1){
  f(8)
}
//这样调用,就好比直接调用Math.sin(8)
doFunction(Math.sin)

参数是函数,有不同的叫法,比如hook,钩子,回调等。执行的内容由我们传入,执行的某些功能集成到别人的代码里了。

闭包

返回类型是函数,容易造成内存泄漏

复制代码
function function9():()=>number{
  let count = 0;
  let g =():number => {count++;return count}
  return g;
}

注意:下面的写法容易造成内存泄漏

复制代码
function function9():()=>number{
  let count = 0;
  let g =():number => {count++;return count}
  return g;
}
let z = function9 ();//z可以理解为g对象
z();//第一次调用返回1
z();//第二次调用返回2
//上面第二次调用的时候  let g =():number => {count++;return count}
//所在的内存区不会回收,所以第一次是1,第二次是2 

解决办法

复制代码
//代码结尾增加
z = null ;

数组与枚举

复制代码
//数组
let names : string[] = ["1","2","3"];
//枚举类型,枚举类型可以赋予默认值,但所有的值必须相同。一般开发中是不需要赋值的
enum MyColor{
  MyRed,
  MyGreen,
  MyBlue
}
//使用
let c:MyColor= MyColor.MyRed

联合类型

复制代码
//联合类型
class Cat{}
class Dog{}
type Pet = Cat|Dog 

复制代码
class Person {
  //类中的字段和普通变量必须有初始值
  //有默认值了就可以不写构造方法。字符串不能为null
  name: string = '';
  //下划线变量
  _age: number = 0;
  //静态属性,使用类名调用
  static X: string = ''
  //可选参数,也必须写初始值
  isVirgin?:boolean = false;


  constructor(name:string,age:number) {
    this.name = name;
    this.age = age;
    Person.X = '杀气'
  }
  //SetGet方法
  setName(name:string):void{
    this.name = name;
  }
  getName():string{
    return this.name;
  }
  //下划线变量的get方法和set方法
  get age():number{
    return this.age;
  }
  set age(n:number){
    this.age = n;
  }
}
let p:Person = new Person("孙悟空",800);
p.age;//访问的是get方法
p.age = 10;//访问的是set方法

访问控制符:private protected public(与JAVA相同)

键值对中可以使用字面量,如下图

类的方法

复制代码
class C{
  //类中的方法不需要带function
  add0(x:number,y:number):number{
    return x+y;
  }
  //静态方法
  static add1(x:number,y:number):number{
    return x+y;
  }
}
相关推荐
淡写成灰8 小时前
「Flutter 文件保存太难了?」一个插件打通 7 大平台,我把方案开源了 🎉
flutter·harmonyos
大雷神13 小时前
HarmonyOS ArkGraphics 2D 自定义字体实操:注册字体并验证中文回退
pytorch·华为·harmonyos
Nayana15 小时前
《Web 到 HarmonyOS》-- 第一课:前端经验哪些能带走
vue.js·harmonyos
大雷神15 小时前
HarmonyOS ArkGraphics 2D 复杂文本排版实操:用 ParagraphBuilder 做资讯阅读卡片
华为·harmonyos
大雷神15 小时前
HarmonyOS ArkGraphics 2D NativeImage 实操:获取 NativeWindow 与 SurfaceId
华为·harmonyos
小玮看世界15 小时前
当“教用户配置系统“成为产品的遮羞布:从鸿蒙拦截栈与小红书联系机制看科技公司的“驯化式创新“
科技·华为·harmonyos
梦想不只是梦与想16 小时前
鸿蒙 应用类型:企业应用
华为·harmonyos·企业应用
大雷神16 小时前
HarmonyOS ArkGraphics 2D 文本绘制实操:用 TextBlob 做动态文字排版
华为·harmonyos
搬砖的kk16 小时前
从 0 到 1:用 KMP + Compose Multiplatform + Ktor 实现鸿蒙「历史上的今天」应用
开源·harmonyos
星辰徐哥17 小时前
鸿蒙PC平台 Gnote 笔记应用适配实战:从 Linux 到 鸿蒙PC 的 Electron 迁移
linux·笔记·electron·harmonyos·gnote