鸿蒙进阶篇-剩余和展开、简单和复杂类型

“在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。”

各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙进阶篇-剩余和展开、简单和复杂类型

在鸿蒙中:

“剩余” 参数允许函数接收数量不定的额外参数,并将它们以数组的形式进行处理,增强了函数在参数处理上的灵活性。

“展开” 常用于数组或对象操作中,例如将数组元素展开为独立的参数传递给函数,或者将对象的属性展开为独立的键值对。

“简单类型” 通常指基本的数据类型,如整数、浮点数、布尔值、字符和字符串等。它们具有固定的大小和简单的操作,在内存中的表示相对直接。

“复杂类型” 则包括数组、对象、类等。这些类型由多个简单类型或其他复杂类型组合而成,具有更丰富的结构和操作方式,需要更多的内存和处理逻辑来管理和操作。

总的来说,“剩余” 和 “展开” 是在编程中处理参数和数据结构的方式,而 “简单类型” 和 “复杂类型” 则是对数据类型的分类,反映了数据的结构和复杂度。

剩余和展开
接下来学习一个运算符 ...
...在不同的情况下有不同的效果,分别是 剩余参数 和 展开

剩余参数
通过剩余参数的语法,我们可以将 函数 或 方法 中一个不定数量的参数表示为一个数组
附上官方文档链接icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/rest_parameters

// 剩余参数 【只能写在最后一位】
function 函数名(参数1,参数2,...剩余参数数组){// 逻辑代码// 剩余参数之前的参数 挨个获取即可// 剩余参数:以数组的形式获取
}

展开
出于程序稳定性,以及运行性能考虑,在 ArkTS 中 ...(展开运算符) 只能用在数组上
附上官方文档链接icon-default.png?t=O83Ahttps://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/quick-start/typescript-to-arkts-migration-guide.md#%E9%83%A8%E5%88%86%E6%94%AF%E6%8C%81%E5%B1%95%E5%BC%80%E8%BF%90%E7%AE%97%E7%AC%A6

下面展示一个案例来理解:

const numArr1: number[] = [1, 2, 3, 4]
const numArr2: number[] = [5, 6, 7]// 合并到一起
const totalArr: number[] = [...numArr1, ...numArr2]// 添加
const numArr3: number[] = [8, 9, 10]
const numArr4: number[] = [11, 12, 13]// 将 numArr4 展开,传递给push
numArr3.push(...numArr4)
console.log('', totalArr)@Entry
@Component
struct Example01 {build() {Column() {Column() {Column() {}.margin(10)}.width(250).height(500).backgroundColor('#eee').border({ width: 2, color: 'green', style: BorderStyle.Solid })}.width('100%')}
}

简单类型和复杂类型


ArkTS中的数据类型整体可以分为 两大类:
1 基本数据类型(简单数据类型)
number 数字型、string 字符串型、boolean布尔型、undefined未定义、null空类型
2 引用数据类型(复杂数据类型)
Object、Function、Array
这两类数据在内存中保存的方式略有不同,导致在日常开发中对这两类数据进行赋值操作时会有不同的结果

下面展示一个案例来理解:

比如如下代码:
1
num1和 num2 的值分别是?
2
p1.name和p2.name 分别是?
// 基本数据类型
let numA: number = 10
let numB: number = numA
numB++
console.log('numA:', numA) // ?
console.log('numB:', numB) // ?// 引用数据类型
class Person {name: string = ''constructor(name: string) {this.name = name}
}const p1: Person = new Person('jack')
const p2: Person = p1
// 修改 P2 是否会报错
p2.name = 'rose'console.log('p1.name:', p1.name) // ?
console.log('p2.name:', p2.name) // ?@Entry
@Component
struct Example01 {build() {Column() {Column() {Column() {}.margin(10)}.width(250).height(500).backgroundColor('#eee').border({ width: 2, color: 'green', style: BorderStyle.Solid })}.width('100%')}
}

为了弄明白上述现象的原因,就需要搞清楚这两种数据类型在内存存储的差异是什么

内存中堆栈空间
咱们可以把内存理解为有 2 类空间:
1栈:访问速度快,基本数据类型存放到栈里面
2堆:存储容量大,引用数据类型存放到堆里面

基本数据类型和复杂数据类型是如何保存的呢?

基本数据类型存储
变量的数据直接存放在栈空间中,访问速度快

引用数据类型存储
1 栈空间:存放 变量的内存地址(堆中的地址)
2 堆空间:存放 变量的 值

站在内存角度看变量赋值

基本数据类型
num1 num2 都保存在堆内存中,虽然值相同,但是各自是独立的空间,后续操作 互不影响

let num1: number = 10
let num2: number = num1

引用数据类型
p1 和 p2 栈内存中有各自独立的空间,但是保存的是堆内存的地址,指向的是同一个数据:
修改 p2.name ,p1.name 也会受到影响,因为是同一份数据

class Person {name: string = ''constructor(name: string) {this.name = name}
}const p1: Person = new Person('jack')
const p2: Person = p1
p2.name = 'rose'

以上是关于鸿蒙进阶篇-剩余和展开、简单和复杂类型、类综合的一些内容,方便大家学习,至此,关于鸿蒙进阶篇 - 剩余和展开、简单和复杂类型综合的内容就介绍到这里,愿您能学以致用,开发出精彩的鸿蒙应用!

以上内容仅供学习交流,如有违法或者侵权可以联系删除。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

【LeetCode:3242. 设计相邻元素求和服务 + 模拟 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

[产品管理-62]:不同角度看产品的生命周期

目录 一、产品的生命周期与不确定性 创意生成 原型开发 规模化和商业化 - 上市前的准备 产品上市 二、产品的生命周期与组合管理 三、产品生命周期变得越来越短的原因 1. 科技进步 2. 消费需求变化 》 物质需求的单一化到精神需求的易变化 3. 市场竞争加剧 4. 全球化…

WPS单元格重复值提示设置

选中要检查的所有的单元格 设置提示效果 当出现单元格值重复时,重复的单元格就会自动变化 要修改或删除,点击

华为eNSP:AAA认证(pap和chap)telnet/ssh

pap模式 一、拓扑图 二、配置过程 1、这个型号路由器是不带串口的,所以需要添加串口板卡 2、加入串行接口卡槽 右击路由,选择设置,将串口板卡拖动到路由器扩展槽,并开机即可 3、认证方路由器配置 [r8]aaa #进入aaa认证 [r8-a…

CSS网格布局:打造现代网页设计的强大工具

在现代网页设计中,布局的灵活性和美观性至关重要。随着需求的不断变化,CSS 网格布局(CSS Grid Layout)作为一种新兴的布局方式,正在成为开发者们的首选工具。它能够轻松创建复杂的网格结构,使得网页设计更加…

SpringBoot助力的共享汽车业务优化系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

算法 -插入排序

博客主页:【夜泉_ly】 本文专栏:【算法】 欢迎点赞👍收藏⭐关注❤️ 文章目录 💡插入排序1. ➡️ 直接插入排序🖼️示意图📖简介💡实现思路💻代码实现📝具体示例 2. ⬆️…

2025中国(郑州)国际台球产业博览会(壹肆柒·台球展)3月

随着体育经济的迅猛发展,台球作为一项受欢迎的竞技运动,近年来在中国逐渐崭露头角。为促进台球产业的发展,推动各类相关产品及服务的交流与合作,从而实现共享共赢,2025年中国(郑州)国际台球产业…

开放式耳机如何选择?五款千万不能错过的开放式耳机机型推荐

在这里我先做一个行业的知识科普,目前市场上有超过80%的品牌,都是非专业的开放式耳机品牌,也就是跨界大牌或者网红品牌,这些品牌由于没有开放式声学的技术沉淀,在制作开放式耳机的时候,通常都是直接套用传统…

VulkanTutorial(17`Loading models, Mipmaps)

Loading models 我们将使用tinyobjloader库从OBJ文件加载顶点和索引,它速度快,易于集成,因为它是一个像stb_image一样的单一文件库 因为我们没有学习光照,使用照明烘焙的纹理 在程序中添加两个新的配置变量来定义模型和纹理路径&…

DAO模式的理解

目录 DAO模式 含义 DAO模式 的理解 分层思维 分层含义 分层目的 dao层 dao包(对接的是操作数据库的接口) dao包下lmpl 包(dao包中接口的实现类) 补充 1 你创建的实体类需要和数据库中建的表一一对应。 总结 DAO模式 含义…

大健康零售行业帮助中心的构建与客户服务优化

在大健康零售行业,客户服务的质量直接影响着企业的品牌形象和市场竞争力。随着数字化转型的推进,构建一个高效、智能的帮助中心成为了提升客户服务和满意度的关键。本文将分析大健康零售行业如何通过构建帮助中心来优化客户服务,并提升客户满…

【JWT】Asp.Net Core中JWT刷新Token解决方案

Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…

Error: error:0308010C:digital envelope routines::unsupported

目录 1、前言2、详细问题3、解决方法3.1、nodejs版本降级3.2、针对openssl设置环境变量3.3、在package.json命令里添加设置 4、效果 1、前言 2024年11月某一天,升级了电脑上的nodejs版本:v22.11.0。 本来运行正常的Vue项目,在运行时突然就报…

win10@win10 配置openssh服务

1.下载离线包:https://github.com/PowerShell/Win32-OpenSSH/releases 2.然后管理员打开powershell,cd到这个安装包放置的目录中来,输入以下命令:powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 此时要注意pow…

优化SEO关键词提升网站曝光度的有效策略

内容概要 在当今数字营销领域,SEO关键词优化的重要性愈发凸显。有效的关键词优化不仅关乎搜索引擎排名,还直接影响到网站的曝光度与流量来源。首先,明确目标受众在搜索引擎中使用的关键词是提高网站能见度的基石。正确的关键词可以帮助网站吸…

Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!

文章目录 Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!1. git stash —— 暂存修改,快速切换分支2. git cherry-pick —— 单独拣选特定提交3. git rebase —— 整理提交历史,让提交记录更清晰4. git reset —— 恢复到指…

ONLYOFFICE 快速部署教程:让你的私有云盘也可以预览和编辑 Office 文档

ONLYOFFICE Docs (原 ONLYOFFICE Document Server) 是一款强大的开源在线办公套件,包含用于文本、电子表格和演示文稿的查看器和编辑器,完全兼容 Office Open XML 格式(.docx、.xlsx、.pptx),并支持实时协作编辑。本文…

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式,低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心,可用于管理低功耗模式的进入和退出,控制时钟源、PLL、电源开…