鸿蒙进阶篇-定时器、递归

devtools/2024/11/17 8:07:53/

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

各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙进阶篇-定时器、递归

在鸿蒙开发中:

定时器:鸿蒙提供了相关的 API 来创建和使用定时器,用于实现定时触发任务、更新界面元素或执行其他周期性的操作。定时器可以帮助开发者实现一些与时间相关的功能逻辑,确保在特定的时间间隔后执行相应的代码块。

递归:和其他编程语言中的概念类似,在鸿蒙开发中,如果一个函数直接或间接地调用自身来解决问题,就形成了递归。例如在处理某些具有递归性质的数据结构(如树形结构)或者解决一些可以通过递归方式更简洁地表达的算法问题时,可能会用到递归。但需要注意递归可能会导致栈溢出等问题,所以在使用时要确保有合适的终止条件。

定时器
日常开发中如果需要代码 延迟一会执行,或者每隔一段时间执行一次,就可以使用定时器
定时器有两种:
1 setTimeout: 延迟执行
2 setInterval: 间隔执行

setTimeout


setTimeout可以用来设置一个定时器,当设置的时间到了之后就会去执行指定的函数
执行一次用 setTimeout
附上官方文档链接icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout
setTimeout、clearTimeout是一个全局函数,可以直接使用

下面展示一个案例来理解:
@Entry
@Component
struct TimeoutDemo {// 只是用来保存数据,不影响 UI 可以不加状态修饰符timeId?: number@State word: number = 0build() {Column({ space: 20 }) {Text('延时器-Timeout').fontSize(30).width('100%').textAlign(TextAlign.Center)Row({ space: 20 }) {Button('开启延时器').onClick(() => {// 开启延时器let timeId = setTimeout(() => {this.word++}, 200)//  保存定时器 idthis.timeId = timeId})Button('关闭延时器').onClick(() => {// 调用 clearTimeout 清除定时器clearTimeout(this.word)})Text(this.word.toString())}}.padding(10)}
}

setInterval


setInterval 也是可以用来设置一个定时器,根据设置的时间间隔来执行指定的函数
执行多次用 setInterval!!
附上官方文档链接icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Web/API/setInterval
setInterval、clearInterval是一个全局函数,可以直接使用

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

@Entry
@Component
struct Page02_interval {// 只是用来保存数据,不影响 UI 可以不加状态修饰符timeId?: number@State word: number = 0build() {Column({ space: 20 }) {Text('定时器-Interval').fontSize(30).width('100%').textAlign(TextAlign.Center)Row({ space: 20 }) {Button('开启延时器').onClick(() => {this.timeId = setInterval(() => {this.word++}, 2000)})Button('关闭延时器').onClick(() => {clearInterval(this.timeId)})}Text(this.word.toString())}.padding(10)}
}

案例-获取验证码
接下来通过刚刚学习的定时器,来完成一个获取验证码的倒计时功能

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

@Entry
@Component
struct LoginDemo {@State time: number = 0build() {Column() {this.titleBuilder()TextInput({ placeholder: '请输入手机号' }).textInputExtend()Divider()Row() {TextInput({ placeholder: '请输入验证码' }).textInputExtend().layoutWeight(1)Text(this.time == 0 ? '发送验证码' : `${this.time}秒后获取`).fontSize(14).fontColor(Color.Gray).onClick(() => {// 避免倒计时 为 0 时,重复点击if (this.time != 0) {return}setTimeout(() => {AlertDialog.show({message: Math.floor(1000 + 9000 * Math.random()).toString()})}, 2000)this.time = 60const timeId = setInterval(() => {this.time--// 倒计时结束,清空定时器if (this.time == 0) {clearInterval(timeId)}}, 1000)})}.width('100%')Divider()Button('登录').width('100%').type(ButtonType.Normal).backgroundColor('#ea6051').margin({ top: 50 })}.padding({ top: 80, left: 40, right: 40 }).width('100%').alignItems(HorizontalAlign.Start)}@BuildertitleBuilder() {Text('短信登录').fontSize(25).fontWeight(600).margin({ bottom: 30 })}
}@Extend(TextInput)
function textInputExtend() {.backgroundColor(Color.White).padding({ left: 0, top: 20, bottom: 20 }).placeholderColor('#ccc')
}

递归
调用自身的函数我们称之为递归函数。
附上官方文档链接icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Glossary/Recursion

基本用法
在某种意义上说,递归近似于循环。两者都重复执行相同的代码,并且两者都需要一个终止条件(避免无限循环,或者在这种情况下更确切地说是无限递归)。

// 没有退出条件的 递归函数--无限递归 function func(){ func() }

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

let num: number = 1function printLog(num: number) {console.log(`你好,第${num}次打印`)// 递减num--// 退出条件if (num > 1) {printLog(num)}
}// 打印 10 次
printLog(10)@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%')}
}

以上是关于鸿蒙进阶篇-定时器、递归 综合的一些内容,方便大家学习,至此,关于鸿蒙进阶篇-定时器、递归 综合的内容就介绍到这里,愿您能学以致用,开发出精彩的鸿蒙应用!

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


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

相关文章

6. Keepalived配置Nginx自动重启,实现7x24提供服务

一. Keepalived配置Nginx自动重启,实现7x24提供服务 1.编写不停的检查nginx服务器状态,停止并重启,重启失败后则停止keepalived脚本 cd /etc/keepalived/ vim check_nginx_alive_or_not.sh #---内容如下:--------------- #!/bin/bash A=`ps -C nginx --no-header |wc -l

Grafana Username password invalid

Grafana 长时间没有登陆忘记了密码,可以使用一下方法把admin密码重置为admin grafana-cli admin reset-admin-password admin 成功后如图显示

高级 SQL 技巧:提升数据查询与管理效率

在现代数据驱动的世界中,掌握 SQL(结构化查询语言)已成为每个数据专业人士的必备技能。虽然许多人都能编写基本的 SQL 查询,但在实际工作中,运用一些高级 SQL 技巧将极大提升数据查询与管理的效率。本文将分享几个实用…

理解消息队列中几个核心概念

消息队列(MQ)的核心概念详解 消息队列(MQ)是一种在分布式系统中用来实现异步通信的关键组件,广泛用于解耦、削峰填谷、异步处理等场景。在实现消息传递的过程中,消息队列包含了许多核心概念,例如 Topic、Tag、Broker 等。本文将详细讲解这些概念及其作用。 1. Topic(主…

R 语言科研配色 --- 第 15 期

在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。 为了便于使用,本系列文章介绍的所有配色都已收录到了 sciRcolor 项目中,获取方式: R 语言科研配色工具 …

Python + Memcached:分布式应用程序中的高效缓存

Python Memcached:分布式应用程序中的高效缓存 编写 Python 应用程序时,缓存非常重要。使用缓存可以避免重新计算数据或访问速度缓慢的数据库,从而大幅提高性能。 Python 提供了内置的缓存功能,从简单的字典到更完整的数据结构&a…

NDNF-RNASeq

数据来源:https://ncbi.nlm.nih.gov/geo/query/acc.cgi?accGSE226291 下载数据(3小时) #!/bin/bash for i in 1 2 3 4 5 6 do prefetch SRR2364187${i} donewget https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_mouse/release_M25/…

UI自动化测试|XPath元素定位实践

前言 自动化测试元素定位是指在自动化测试过程中,通过特定的方法或策略来准确识别和定位页面上的元素,以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…