Java开发人员从零学习ArkTs笔记(二)-函数与类

devtools/2024/11/14 20:13:50/

大家好,我是一名热爱Java开发的开发人员。目前,我正在学习ARKTS(Advanced Java Knowledge and Technology Stack),并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得,希望能够为其他开发人员提供一些有价值的参考和帮助。让我们一起探索ARKTS的奥秘,共同进步!

ArkTS是一种为构建高性能应用而设计的编程语言。ArkTS在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。本文,主要是对ArkTs函数与类学习过程,进行总结输出。

1. 函数

函数声明
函数声明引入一个函数,包含其名称、参数列表、返回类型和函数体。

以下示例是一个简单的函数,包含两个string类型的参数,返回类型为string:

function add(x: string, y: string): string {let z: string = `${x} ${y}`;return z;
}

可选参数
可选参数的格式可为name?: Type。


export function test(input ?: string) {if (input == undefined) {console.log("undefined")} else {console.log(input)}
}

可选参数的另一种形式为设置的参数默认值。如果在函数调用中这个参数被省略了,则会使用此参数的默认值作为实参。


export function test(input ?: string, num : number = 2) {if (input == undefined) {console.log("undefined")} else {console.log(input)}
}

Rest参数
函数的最后一个参数可以是rest参数。使用rest参数时,允许函数或方法接受任意数量的实参。

function sum(...numbers: number[]): number {let res = 0;for (let n of numbers)res += n;return res;
}sum(); // 返回0
sum(1, 2, 3); // 返回6

返回类型
如果可以从函数体内推断出函数返回类型,则可在函数声明中省略标注返回类型。

export function add(num1 : number = 1, num2 : number = 2) {return num1 + num2;
}

不需要返回值的函数的返回类型可以显式指定为void或省略标注。这类函数不需要返回语句。

以下示例中两种函数声明方式都是有效的:

function hi1() { console.log('hi'); }
function hi2(): void { console.log('hi'); }

函数的作用域
函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问。

如果函数中定义的变量与外部作用域中已有实例同名,则函数内的局部变量定义将覆盖外部定义。

函数调用
调用函数以执行其函数体,实参值会赋值给函数的形参。

export function test2(num2: number, num = add()) {return num2 + num;
}test2(2, add(3, 4))

函数类型
函数类型通常用于定义回调:

t

ype trigFunc = (x: number) => number // 这是一个函数类型function do_action(f: trigFunc) {f(3.141592653589); // 调用函数
}do_action(Math.sin); // 将函数作为参数传入

箭头函数(又名Lambda函数)
函数可以定义为箭头函数,例如:

let sum = (x: number, y: number): number => {return x + y;
}

箭头函数的返回类型可以省略;省略时,返回类型通过函数体推断。

let kk = (num2: number, num = add()) => num2 + num
let k = (x: number, y: number) => x + y

函数重载
我们可以通过编写重载,指定函数的不同调用方式。具体方法为,为同一个函数写入多个同名但签名不同的函数头,函数实现紧随其后。

function testkk(str: string): voidfunction testkk(n: number): voidfunction testkk(w: string | number) {}

2.类

类声明引入一个新类型,并定义其字段、方法和构造函数。

class Person {name: string = '';age: number = -1;constructor(name: string, age: number) {this.name = name;this.age = age;}
}

定义类后,可以使用关键字new创建实例:

let son = new Person("xiaoming", 20)
let son1 = new Person("xiaok", 21)

或者,可以使用对象字面量创建实例:

class Point {x: number = 0;y: number = 0;
}
let p: Point = {x: 42, y: 42};

Note:这里有一个发现, 字面量不支持构造方法,即以下写法,编译器会报错

class Person {name: string = "";age: number = -1;constructor(name: string, age: number) {this.name = name;this.age = age;}
}let son1: Person = {name: "xx", age: 21}; ~~//此处会报错,字面量,不支持构造方法~~ 

ArkTS的可见性修饰符和构造函数重载
在ArkTS中,类和对象的使用与TypeScript类似,包括可见性修饰符(public、protected、private)和构造函数重载等特性。例如:

class Person {name: string= "";age: number = -1;constructor(x: number | string) {if (typeof x === 'number') {this.age = x;} else {this.name = x;}}
}let son1 = new Person("xiaom")
let son2 = new Person(23)

字段初始化
ArkTS要求所有字段在声明时或者构造函数中显式初始化。即:以下的写法,在编译器中,会报错。
在这里插入图片描述

接下来的代码展示了如果name的值可以是undefined,那么应该如何写代码。
在这里插入图片描述

class Person {name?: string;age: number = -1;
}let son1 = new Person()
son1.name?.toString()

方法
方法上,基本和java一样。

  • 实例方法可以归属与类,也可以是静态的方法
  • 继承和实现、方法重写和java一样
  • 父类和子类的概念,和java也基本一样
  • 方法重载签名,这个和java不一样,需要进行签名,然后进行统一实现
  • 构造函数,原则上只允许一个,和java不一样
  • 可见性修饰符,public、private、protected
  • 对象字面量,对象字面量是一个表达式,可用于创建类实例并提供一些初始值
  • Record类型的对象字面量
  • 泛型函数、泛型约束,使用方法和java一直,多了一个泛型默认值

空安全
默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。
在这里插入图片描述
但是可以这样

let numm : number | nullclass Person {name: string | null | undefined;age: number = -1;
}let son1 = new Person()
son1.name?.toString()

空值合并运算符
a ?? b等价于三元运算符(a != null && a != undefined) ? a : b

class Person {name: string | null | undefined;age: number = -1;getName(): string {return this.name ?? "xiaoming";}
}

但是,使用过程中,发现一个问题,这个变量,需要必须同时声明为null | undefined,才可以使用??
必须这样

function testkk(w: string | number) {let numm: number | null |undefinednumm ?? 23
}

如果这样,编译器报错
在这里插入图片描述

3.总结

本文,主要总结了在ARKTS(Advanced Java Knowledge and Technology Stack)中对函数与类的学习过程。以下是总结:

函数: 涵盖函数声明、可选参数、Rest参数、返回类型、作用域、调用、类型和箭头函数等,详细解释了如何使用这些特性,并提供了示例代码。
类: 包括类声明、构造函数、字段初始化、方法、空安全及空值合并运算符等,展示了ArkTS中类的定义和使用,以及与Java的不同之处。


http://www.ppmy.cn/devtools/133993.html

相关文章

使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载

使用 VisualStudioUninstaller 卸载 Visual Studio 的详细步骤(以管理员权限运行) 步骤 1:下载并解压 VisualStudioUninstaller 访问下载工具。 点击下载 解压下载的文件到本地目录,例如:C:\VSUninstaller。 步骤 …

外星人入侵

学习于Python编程从入门到实践(Eric Matthes 著) 整体目录:外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站:Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果:可以上下左右移…

2024 - 苹果审核规则小结

苹果审核千奇百怪,能不能过审核,一方面看实力,一方面也看行情和运气。 有些核心的,需要测试非常久的规则我不能说,但是有些花费点时间,消耗个五六个账号就可以测试出来的规则,可以说一说。 本…

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器,可以用作多级分类的场景。本人引入插件后,发现,在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。 以选择年级,而不选择班级。然后,想试试…

ubuntu[无桌面]——使用FileZilla连接本地和虚拟机实现文件共享

在虚拟机上跑命令的时候,有时候需要使用到一些在本机上的文件,但是由于安装的Ubuntu是无桌面的,那么怎么去实现将本地文件拖放到虚拟机上捏,这里记录一下 FileZilla的操作,以及一些问题的解决。 (1&#xf…

材质(二)——材质参数化,从源材质继承生成不同的材质实例

继承原材质,对外提供参数。 更改调制不同的参数,生成不同的材质实例。 类似于,类的继承。有一个基类Base.继承生成为子类 A_Base,B_Base,C_Base

ArkTS的进阶语法-4(函数补充,正则表达式)

文章目录 ArkTS的进阶语法1. 泛型1.泛型函数2.使用泛型约束3.多个泛型参数4.泛型接口5.泛型类 2.工具类型**1.partial<Type>** 3.空安全1.联合类型设置为空2.非空断言运算符3.空值合并运算符4.可选链 4.模块化1.默认导入与导出2.按需导入与导出3.全部导入 5.定时器1.setT…

TypeScript在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 TypeScript在现代前端开发中的应用 引言 TypeScript 概述…