【鸿蒙】HarmonyOS NEXT星河入门到实战7-ArkTS语法进阶

目录

1、Class类

1.1 Class类 实例属性

1.2  Class类 构造函数

1.3 Class类 定义方法

1.4 静态属性 和 静态方法

1.5 继承 extends 和 super 关键字

1.6 instanceof 检测是否实例

1.7.修饰符(readonly、private、protected 、public)

1.7.1 readonly

1.7.2 Private 

 1.7.3 protected

 1.7.4 public

2、剩余参数和展开运算符

2.1 剩余参数语法

2.2 剩余参数和展开运算符

 3、接口补充

3.1 接口继承

3.2 接口实现

 4、泛型

4.1 泛型函数

4.2 泛型约束

4.3 多个泛型参数

 4.4 泛型接口

4.5 泛型类


前言:ArkTS语法进阶Class、剩余参数和展开运算符,同时包含对接口的补充说明、泛型

1、Class类

1.1 Class类 实例属性

注意定义类要设置初始值,不设置初始值要设置为可选字段 使用符号?

import window from '@ohos.window';class Cat {name: string = 'Tom'foods?: string
}// 基于类创建对象
let p: Cat = new Cat()
p.foods = 'sss'
console.log(p.name)
@Entry
@Component
struct Index {@State message: string = '@春天的菠菜';onPageShow(): void {window.getLastWindow(AppStorage.get("context"), (err, data) => {if (err.code) {console.error('Failed to get last window. Cause:' + JSON.stringify(err));return;}data.setFullScreen(true)});}build() {Column(){Text(p.name +'****'+ p.foods+'****'+ p.foods?.length).fontSize(20).fontWeight(700).backgroundColor(Color.Green).padding(10)}.width('100%').height(100)}
}

 

1.2  Class类 构造函数

import window from '@ohos.window';
@Extend(Text)
function textExtend(){.fontSize(20).fontWeight(700).backgroundColor(Color.Green).padding(10).margin(5)
}// 1 构造函数语法
class Food {name: stringprice: numberconstructor(name:string, price:number) {this.name = namethis.price = price}
}let f1 = new Food('西红柿', 2.23)
let f2= new Food('面条', 15.00)//********************************************************
interface iCat{name: stringprice: numberdesc: string
}// 多参数传参合并
class Cat {name: stringprice: numberdesc: stringconstructor(paramsObj: iCat) {this.name = paramsObj.namethis.price = paramsObj.pricethis.desc = paramsObj.desc}
}let p1: Cat = new Cat({name: '波斯猫',desc: '珀斯的猫',price: 123222
})@Entry
@Component
struct Index {@State message: string = '@春天的菠菜';onPageShow(): void {window.getLastWindow(AppStorage.get("context"), (err, data) => {if (err.code) {console.error('Failed to get last window. Cause:' + JSON.stringify(err));return;}data.setFullScreen(true)});}build() {Column(){Text(f1.name +'****'+ f1.price+'元').textExtend()Text(f2.name +'****'+ f2.price+'元').textExtend()Text(p1.name +'****'+ p1.price+'元'+'****'+p1.desc).textExtend()}.width('100%').height(100)}
}

 

1.3 Class类 定义方法

import window from '@ohos.window';
@Extend(Text)
function textExtend(){.fontSize(20).fontWeight(700).backgroundColor(Color.Green).padding(10).margin(5)
}class Person {name: stringage: numberconstructor(name: string,age: number) {this.name = namethis.age = age}// 类方法sayHi(yorName:string){return ('Hello!' + yorName + '我是' + this.name)}
}let p1: Person = new Person('波斯猫', 18)@Entry
@Component
struct Index {@State message: string = '@春天的菠菜';onPageShow(): void {window.getLastWindow(AppStorage.get("context"), (err, data) => {if (err.code) {console.error('Failed to get last window. Cause:' + JSON.stringify(err));return;}data.setFullScreen(true)});}build() {Column(){Text(p1.name +'****'+ p1.sayHi('春天的菠菜')).textExtend()}.width('100%').height(100)}
}

 

1.4 静态属性 和 静态方法

import window from '@ohos.window';
@Extend(Text)
function textExtend(){.fontSize(20).fontWeight(700).backgroundColor(Color.Green).padding(10).margin(5)
}class Robot {static version: string = 'V2.0'static  getRandom():number{return Math.random()}}@Entry
@Component
struct Index {@State message: string = '@春天的菠菜';onPageShow(): void {window.getLastWindow(AppStorage.get("context"), (err, data) => {if (err.code) {console.error('Failed to get last window. Cause:' + JSON.stringify(err));return;}data.setFullScreen(true)});}build() {Column(){Text(Robot.version +'****'+ Robot.getRandom()).textExtend()}.width('100%').height(100)}
}

1.5 继承 extends 和 super 关键字

import window from '@ohos.window';
@Extend(Text)
function textExtend(){.fontSize(20).fontWeight(700).backgroundColor(Color.Green).padding(10).margin(5)
}class Person {name: stringage: numberconstructor(name:string, age:number) {this.name =namethis.age = age}sayHi(): string{return 'Hello!'}}
class Student extends Person{grade: stringconstructor(name:string, age:number,grade: string) {// 父类中的构造函数super(name,age)this.grade = grade}// 子类想要重写父类的方法,只需提供同名的方法即可sayHi(): string{super.sayHi() // 保留了父类的,又新增了自己的return 'Student HI!'}study (): string {return '我爱学习'}}
class Teacher extends Person{}
class Worker extends Person{}let s1: Student = new Student('张三',18,'五年级')
let t1: Teacher = new Teacher('李四',32)
let w1: Worker = new Worker('王五', 46)@Entry
@Component
struct Index {@State message: string = '@春天的菠菜';onPageShow(): void {window.getLastWindow(AppStorage.get("context"), (err, data) => {if (err.code) {console.error('Failed to get last window. Cause:' + JSON.stringify(err));return;}data.setFullScreen(true)});}build() {Column(){Text( s1.name+ s1.sayHi()+s1.grade+s1.study()+'****'+ t1.name+t1.sayHi()).textExtend()}.width('100%').height(100)}
}

 

1.6 instanceof 检测是否实例

// console.log(typeof 111)
// console.log(typeof true)
// console.log(typeof 'abc')
//
// // typeof 仅能用于判断简单类型, 复杂类型需要用instanceof判断
// class Person {}
// class Student {}
// let p: Person = new Person()
// let s: Student = new Student()
// console.log(typeof p)
// console.log(typeof s)class Person {}
class Student extends Person {}
class Worker extends Person {}let s: Student = new Student()
console.log('判断结果:', s instanceof Student)
console.log('判断结果:', s instanceof Person)
console.log('判断结果:', s instanceof Worker)interface IObj {}
// 判断一个变量是否存的是数组
let temp: IObj = {}
console.log('是否是数组', temp instanceof Array)@Entry
@Component
struct Index {build() {// Row().width(100)Column() {}}
}

1.7.修饰符(readonly、private、protected 、public)

1.7.1 readonly

// 修饰符 readonly
class Cat {name: stringage: numberreadonly legs: number = 4constructor(name: string, age: number) {this.name = namethis.age = age}
}
let c1 = new Cat('小花', 2)
c1.name = '小美'
// c1.legs = 6 // 不能修改
console.log('姓名:', c1.name)// 3.1415926 圆周率
// Math.PI@Entry
@Component
struct Index {build() {// Row().width(100)Column() {}}
}

1.7.2 Private 

// class Person {
//   private name: string = ''
//   private age: number = 0
//   desc: string = '描述'
// }
// let p = new Person()
// console.log('实例访问:', p.name) // 无法再外部访问私有数据// class Student extends Person {
//   sayHi () {
//     console.log('访问私有的数据:', super.name) // 私有数据无法再(子类)访问
//   }
// }@Entry
@Component
struct Index {build() {// Row().width(100)Column() {}}
}

 1.7.3 protected

 

 1.7.4 public

class Person {protected name: stringprotected age: numberdesc: string = '描述'// 类的内容, 无论是私有还是保护, 都是可以访问的constructor(name: string, age: number) {this.name = namethis.age = age}
}
let p = new Person('小王', 18)
// console.log('实例访问:', p.name) // 无法在外部, 访问受保护的数据class Student extends Person {sayHi () {console.log('访问私有的数据:', super.name) // 保护的数据可以在子类访问}
}@Entry
@Component
struct Index {build() {// Row().width(100)Column() {}}
}

2、剩余参数和展开运算符

2.1 剩余参数语法

// ... 展开运算符, 用于数组的平铺合并
let arr1: number[] = [1,2,3]
let arr2: number[] = [4,5,6]
let newArr: number[] = [...arr1, ...arr2]
console.log('最终的数组', newArr)@Entry
@Component
struct Index {build() {Column() {}}
}

2.2 剩余参数和展开运算符

合并数组 

// ... 展开运算符, 用于数组的平铺合并
let arr1: number[] = [1,2,3]
let arr2: number[] = [4,5,6]
let newArr: number[] = [...arr1, ...arr2]
console.log('最终的数组', newArr)@Entry
@Component
struct Index {build() {Column() {}}
}

 3、接口补充

3.1 接口继承

interface IAnimal {name: stringage: number
}
interface ICat extends IAnimal {hair: string
}
interface IDog extends IAnimal {color: string
}
let dog1: IDog = {name: '小泰迪',age: 2,color: '棕色'
}@Entry
@Component
struct Index {build() {Column() {}}
}

3.2 接口实现

// 接口实现: 定义一个接口, 约束类 => 类需要按照接口的要求, 实现类的主体
interface IDog {name: stringage: numberjump: () => void
}// 基于接口, 实现类
class Dog implements IDog {name: stringage: numberdesc: stringconstructor(name: string, age: number, desc: string) {this.name = namethis.age = agethis.desc = desc}jump() {}
}
let dog: Dog = new Dog('小飞', 2, '是一只非常帅气的二哈')
dog.jump()function 函数名<Type>(temp:Type):Type{return temp
}@Entry
@Component
struct Index {build() {Column() {}}
}

 4、泛型

4.1 泛型函数

// 泛型: 广泛的类型 => 类型可以作为参数传递过来, 类型是[可变]的
// function 函数名<Type> (形参: Type): Type {
//   return 形参
// }// 封装了一个函数: 传入什么样的参数, 就立刻返回什么样的参数
function fn<T> (param: T) : T {return param
}
fn<string>('abc')
fn<number>(123)
fn<boolean>(true)
fn<number[]>([1, 2, 3, 4, 5])// 会默认根据传参, 进行类型推断, 动态的配置 T 类型参数 的值
fn(true)
fn([1, 2, 3, 4, 5])// 练习1: 定义函数, 参数是数组(存的类型不定), 返回数组的长度
function getLength<T> (arr: T[]) : number {return arr.length
}
console.log('', getLength<number>([1, 2, 3]))
console.log('', getLength<string>(['1', 'aa', 'bb', 'cc']))// 练习2: 定义函数, 参数是数组(存的类型不定), 返回数组的最后一项
function getLast<T> (arr: T[]) : T {return arr[arr.length - 1]
}
console.log('', getLast<number>([1, 2, 3, 4, 99]))
console.log('', getLast<string>(['a', 'b', 'c']))@Entry
@Component
struct Index {build() {Column() {}}
}

4.2 泛型约束

// 泛型约束: 给传递的类型参数, 添加限制
interface ILength {length: number
}
function fn<T extends ILength>(param: T) {console.log('', param.length)
}fn<string>('abc')
fn<number[]>([1, 2, 3])class Desk {length = 2
}
let d = new Desk()
fn<Desk>(d)@Entry
@Component
struct Index {build() {Column() {}}
}

4.3 多个泛型参数

// 多个泛型变量 => 传递多个类型参数
function fn<T1, T2> (param1: T1, param2: T2) {console.log('参数1', param1)console.log('参数2', param2)
}
fn<string, boolean>('abc', true)
fn<number, string>(123, 'abc')
fn<string[], number[]>(['a', 'b'], [1, 2])@Entry
@Component
struct Index {build() {Column() {}}
}

新版本已经能自动识别

 

 4.4 泛型接口

// 泛型接口
interface IdFunc<T> {// 约定有两个方法 (id类型不定, string number)// 1. 传入 id 值, 就返回 id 值// 2. 返回一个 ids 数组id: (value: T) => Tids: () => T[]
}let obj: IdFunc<number> = {id(value: number) {return value},ids() {return [1, 2, 3]}
}let obj2: IdFunc<string> = {id(value: string) {return value},ids() {return ['001', '002', '003']}
}@Entry
@Component
struct Index {build() {Column() {}}
}

4.5 泛型类

// 泛型类: 定义类的时候, 配合泛型一起定义
class Person <T>{id: Tconstructor(id: T) {this.id = id}getId (): T {return this.id}
}
let p: Person<number> = new Person<number>(10)
let p2: Person<string> = new Person<string>('abc')@Entry
@Component
struct Index {build() {Column() {}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车免拆诊断案例 | 沃尔沃V40 1.9TD断续工作

故障现象 一辆04款的沃尔沃V40 1.9 TD&#xff0c;发动机代码D4192T3&#xff0c;使用博世EDC15C发动机管理。客户说车子断续工作&#xff0c;怀疑是正时皮带出现问题。卸下上皮带盖&#xff0c;检查发现皮带仍然在原来的位置上并且没有出现松动。起动发动机&#xff0c;车辆能…

安卓玩机工具-----ADB与 FASTBOOT模式 图形化 多功能玩机刷机工具

工具说明 这款工具是英文版。易于使用的工具提供了用于运行 ADB 和 Fastboot 命令的图形用户界面。ADB 功能包括旁加载、安装和卸载应用程序、测试设备以及重新启动到不同的模式。可以使用 fastboot 命令进行设备管理;其中包括检查 Antirollback 和 active slots 等变…

YOLOv8 人体姿态估计动作识别关键点检测(代码+教程)

YOLOv8 人体姿态判断 项目介绍 YOLOv8 人体姿态判断 是一个基于最新YOLOv8模型的深度学习项目&#xff0c;旨在识别和分析人体姿态。该项目利用先进的计算机视觉技术和深度学习框架&#xff0c;通过摄像头捕捉实时图像或处理存储图像&#xff0c;识别人体的关键点&#xff0c…

基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机 ds18B20读取温度&#xff0c; 设置初始心率65 设置温度阈值38 心率阈值60 100 如果超过阈值&#xff0c;蜂鸣器报警&#xff0c;led灯亮 二、硬件资源 基于KEIL5编写C代码&#…

数据库语言、SQL语言、数据库系统提供的两种语言

1.数据库语言 数据库语言有很多种&#xff0c;其中一种是SQL语言。 2. SQL语言 【几乎所有的关系数据库系统都使用SQL语言。】 SQL语言中包含很多不同的部分&#xff0c;有&#xff1a; &#xff08;1&#xff09;DDL语言&#xff08;Data definition language&#xff09;…

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…

(k8s)Kubernetes 从0到1容器编排之旅

一、引言 在当今数字化的浪潮中&#xff0c;Kubernetes 如同一艘强大的航船&#xff0c;引领着容器化应用的部署与管理。它以其卓越的灵活性、可扩展性和可靠性&#xff0c;成为众多企业和开发者的首选。然而&#xff0c;要真正发挥 Kubernetes 的强大威力&#xff0c;仅仅掌握…

pytorch 报错 the graph are freed when you call .backward() or autograd.grad()

原来 的环境 是 python 3.7 torch1.13.1 环境 下面跑通的代码 到 python 3.10 和torch 2.3.1报错 File "/mnt/workspace/t.py", line 200, in train d_loss.backward() File "/usr/local/lib/python3.10/site-packages/torch/_tensor.py", line 5…

flink 常见的缩减状态的方式

在 Apache Flink 中&#xff0c;缩减状态(state reduction)是指在流处理任务中&#xff0c;通过一定的方式减少或优化状态的存储和管理&#xff0c;降低内存消耗或加快计算速度。以下是 Flink 中常见的缩减状态的方式&#xff1a; 1. 时间窗口&#xff08;Windowing&#xff0…

C++系列-谓词predicate

谓词predicate &#x1f4a2;什么是谓词&#x1f4a2;&#x1f4a2;函数(function)谓词&#x1f4a2;&#x1f4a2;函数指针(function pointer)谓词&#x1f4a2;&#x1f4a2;函数对象(Function Object)谓词&#x1f4a2;&#x1f4a2;lambda表达式谓词&#x1f4a2;&#x1f…

加密与安全_优雅存储用户密码的最佳实践

文章目录 Pre概述最佳实践避免使用MD5、SHA1等快速哈希算法加盐哈希 &#xff08;不推荐&#xff09;使用BCrypt、Argon2等慢哈希算法 (推荐)BCrypt Code1. 自动生成和嵌入盐2. 哈希结果的格式3. 代价因子 BCrypt特点 防止暴力破解1. 登录失败锁定2. 双因素认证&#xff08;2FA…

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }

搭建VUE前端项目流程——Node.js 、Yarn、npm、Vue、Vite、Webpack

文章目录 搭建VUE前端项目流程Vue、Vite、Webpack、Yarn、Node.js 和 npm 的概念解释&#xff0c;以及它们之间的关系&#xff1a;搭建项目流程 搭建VUE前端项目流程 Vue、Vite、Webpack、Yarn、Node.js 和 npm 的概念解释&#xff0c;以及它们之间的关系&#xff1a; Node.js…

Python酷库之旅-第三方库Pandas(117)

目录 一、用法精讲 516、pandas.DataFrame.add_suffix方法 516-1、语法 516-2、参数 516-3、功能 516-4、返回值 516-5、说明 516-6、用法 516-6-1、数据准备 516-6-2、代码示例 516-6-3、结果输出 517、pandas.DataFrame.align方法 517-1、语法 517-2、参数 51…

12. DataLoader的基本使用

DataLoader的基本使用 1. 为什么要使用DataLoader DataLoader对创建好的DataSet的样本取样进行了集成操作,非常方便对于后续网络训练、测试的数据集的选择和使用 DataLoader可以集成了数据批量加载的方法,可以使用 batch_size 设置批量大小,DataLoader就会自动处理批量数据…

adb install失败: INSTALL_PARSE_FAILED_NO_CERTIFICATES

这个错误表明在尝试安装 APK 文件时出现了问题&#xff0c;原因是 APK 文件中的 AndroidManifest.xml 没有签名证书。在 Android 系统中&#xff0c;所有的应用都必须经过签名才能安装到设备上。以下是解决此问题的方法&#xff1a; 方法一&#xff1a;使用 Android Studio 或命…

Go语言基本语法

Go语言&#xff08;通常称为Golang&#xff09;是由Google开发的一种静态类型、编译型语言&#xff0c;它旨在简化系统编程、网络编程和并发编程的复杂性。 Go语言以其简洁、高效和易于理解的语法而受到开发者的喜爱。 Go语言的一些基本语法元素&#xff1a; 1. 包&#xff…

protobuf中c、c++、python使用

文章目录 protobuf实例&#xff1a;例题1&#xff1a;[CISCN 2023 初赛]StrangeTalkBot分析&#xff1a;思路&#xff1a;利用&#xff1a; 例题2&#xff1a;[CISCN 2024]protoverflow分析&#xff1a; protobuf Protocol Buffers&#xff0c;是Google公司开发的一种数据描述语…

python提取pdf表格到excel:拆分、提取、合并

本文介绍使用python提取pdf中的表格到excel中,包含pdf的拆分、pdf提取到excel、合并excel。 一、拆分pdf 将一个大的pdf按页数拆分为多个小的pdf: # pip install PyPDF2import os, pdfplumber, PyPDF2# 分割pdf def split_pdf(input_pdf_path, num_splits):# Create a PDF…

数学学习记录

9月14日 1.映射&#xff1a; 2.函数: 9月15日 3.反函数&#xff1a; 4.收敛数列的性质 5.反三角函数&#xff1a; 9月16日 6.函数的极限&#xff1a; 7.无穷小和无穷大 极限运算法则&#xff1a;