首页 > 其他分享 >【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)

【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)

时间:2024-09-10 21:53:20浏览次数:10  
标签:console log 05 星河 width while num let 数组

 序言:

本文详细介绍了ArkTs语言中的数组、if单双多分支判断、switch判读、while循环、for循环并给出相应的具体案例和实现代码,附有综合案例京东购物的加购。

笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。

B站黑马的课程链接:鸿蒙课程介绍_哔哩哔哩_bilibili

 往期笔记:

【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础

【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布(附QQ登陆、得物、京东登陆综合案例+代码)

【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局(弹性/层叠)方式与界面开发综合(附飞狗卡片+B站卡片案例+实战开发支付宝界面+代码)

【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符+状态管理(附综合案例美团购物车) 

目录

一.数组

二.语句-if

三.语句-switch

四.语句-三元条件表达式

五.条件渲染

六.京东购物车加购案例

七.语句-循环语句

八.对象数组

九.ForEach-渲染控制


一.数组

1.数组的操作

主要针对数组中的数据进行查找、修改、增加和删除

操作

语法

查找

数组名[下标]、数组名.length

修改

数组名[下标]=新值

增加

数组名.push(数据1,数据2,...)、

数组名.unshift(数据1,数据2,...()

删除

数组名.pop()、数组名.shift()

任意位置增加或删除

数组名.splice(操作的起始位置,删除的个数,新增1,新增2,...)

代码示意:

//1.定义数组
let names:string[] = ['刘小备','吕小布','张大飞','牛大马','飞飞鱼']
console.log('整个数组',names)


//2.数组取值
console.log('数组取值',names[1])
console.log('数组长度',names.length)


//3.数组修改
names[2]='赵小云'
console.log('修改数组',names[2])


//4.往数组添加元素
//4.1往开头加
names.unshift('雷电河马')
//4.2往结尾加
names.push('笨拙河马')
console.log('整个数组',names)


//5.删除数组元素
//5.1从开头删
names.shift()
//5.2从结尾删
names.pop()
console.log('整个数组',names)


//6 任意位置添加/删除数组元素
//6.1删除
names.splice(2,2)
console.log('整个数组',names)
//6.2新增
names.splice(1,0,'飞天河马','彩虹河马')
console.log('整个数组',names)

二.语句-if

语句概念:一段可以执行的代码,是一个行为(num=a+b)

表达式概念:可以被求值的代码,并将其计算出一个结果(1+1、3*5、3>2)

语句执行结构:

1.if分支语句

if分支语句:根据逻辑条件不同,执行不同语句

if (逻辑条件){
  条件成立执行代码
}
else {
  条件不成立执行代码
}
→小括号条件结果为true,则执行大括号里面的代码

→小括号结果不是布尔类型时,会类型转换为布尔值

代码实例:

//分支语句if
let brother:number = 30
let sister:number = 118
function score(num:number){
  if(num>80){
    console.log('考试优秀,带你去游乐园')
  }
  else {
    console.log('考试不及格,给我去写检讨')
  }
}
score(brother)
score(sister)

2.if计数器案例

@Entry
@Component
struct Index {
@State num:number=0
  build() {
    Row(){
      Text('-')
        .border({
          width:1
        })
        .onClick(()=>{
          if(this.num==0){
            AlertDialog.show({
              message:'数字已经不可减少'
            })
          }
          else {
            this.num--
          }
        })
        .textAlign(TextAlign.Center)
        .layoutWeight(1)
        .height(100)
        .width('100%')


      Text(this.num.toString())
        .border({
          width:1
        })
        .textAlign(TextAlign.Center)
        .layoutWeight(2)
        .height(100)
        .width('100%')


      Text('+')
        .onClick(()=>{
          this.num++
        })
        .border({
          width:1
        })
        .textAlign(TextAlign.Center)
        .layoutWeight(1)
        .height(100)
        .width('100%')
    }
    .padding(10)

  }

}

3.if多分支

if多分支,可以解决多种分支的情况

/*分支语句if多分支
if(条件1){
  条件1成立执行的代码
}
else if(条件2){
  条件2成立执行的代码
}
else if(条件3){
  条件3成立执行的代码
}
else {
  条件都不成立执行的代码
}*/
代码示意:

let brother:number = 30
let sister:number = 95
function score(num:number){
  if(num>90){
    console.log('优秀')
  }
  else if (num>80){
    console.log('良好')
  }
  else if(num>60){
    console.log('及格')
  }
  else{
    console.log('差')
  }
}
score(brother)
score(sister)

三.语句-switch

switch分支一般用于精确匹配,不同的值执行不同的代码

语法:

switch (表达式){
  case 值1:
    与值1匹配执行的语句
    break
  case 值2:
    与值2匹配执行的语句
    break
  default :
    以上都为成功匹配执行的代码
}

代码示意:

let brother:string = '男'
let sister:string = '女'
let xiaoming:string = '外星人'
function sex(sex:string) {
  switch (sex) {
    case '男':
      console.log('鉴定为','男孩穷养')
      break
    case '女':
      console.log('鉴定为','女孩富养')
      break
    default:
      console.log('鉴定为','外星人天生地养')
  }
}
sex(brother)
sex(sister)
sex(xiaoming)

四.语句-三元条件表达式

语法:

条件?条件成立执行的表达式:条件不成立执行的表达式

代码示意:

let num1:number = 20
let num2:number = 55
num1>num2?console.log('num1比num2大'):console.log('num1比num2小')

五.条件渲染

条件渲染:使用if、else和else if,可基于不同状态渲染对应不同UI内容

代码示意:

@Entry
@Component
struct Index {
@State num:number=1
  build() {
  //计数器
    Column(){
      Row() {
        Text('-')
          .border({
            width: 1
          })
          .onClick(() => {
            if (this.num == 0) {
              AlertDialog.show({
                message: '数字已经不可减少'
              })
            } else {
              this.num--
            }
          })
          .textAlign(TextAlign.Center)
          .layoutWeight(1)
          .height(100)
          .width('100%')


        Text(this.num.toString())
          .border({
            width: 1
          })
          .textAlign(TextAlign.Center)
          .layoutWeight(2)
          .height(100)
          .width('100%')


        Text('+')
          .onClick(() => {
            this.num++
          })
          .border({
            width: 1
          })
          .textAlign(TextAlign.Center)
          .layoutWeight(1)
          .height(100)
          .width('100%')
      }
      .padding(10)




      Column(){
        if(this.num<18){
          Text('未成年,18岁以下')
            .fontSize(25)
        }else if(this.num<30){
          Text('青少年,18岁到30岁')
            .fontSize(25)
        }
        else{
          Text('老年人,30岁以上')
            .fontSize(25)
        }
      }
    }
  }
}

六.京东购物车加购案例

1.代码示意:

@Entry
@Component
struct Index {
  // 库存, 有库存 > 0
  @State count: number = 0  // 无库存


  build() {
    Column() {
      Column() {
        // 底部菜单
        Row({space: 10}) {
          // 左侧菜单
          Row() {
            Column({space: 5}) {
              Image($r('app.media.ic_dianpu'))
                .width(20)
              Text('店铺')
                .fontSize(10)
                .fontColor('#262626')
            }
            Column({space: 5}) {
              Image($r('app.media.ic_kefu'))
                .width(20)
                .fillColor('#666')
              Text('客服')
                .fontSize(10)
                .fontColor('#262626')
            }
            Column({space: 5}) {
              Image($r('app.media.ic_cart2'))
                .width(20)
                .fillColor('#666')
              Text('购物车')
                .fontSize(10)
                .fontColor('#262626')
            }
          }
          .layoutWeight(1)
          .justifyContent(FlexAlign.SpaceBetween)


          // 根据库存控制不同按钮的展示
          if (this.count > 0) {
            // 右侧按钮 -- 可以购买
            Row({space: 5}) {
              Button('加入购物车')
                .width(105)
                .height(40)
                .backgroundColor('#ffcc00')
                .fontSize(14)
                .fontWeight(600)
              Button('立即购买')
                .width(105)
                .height(40)
                .backgroundColor('#f92c1b')
                .fontSize(14)
                .fontWeight(600)
            }
          }
          else {
            // 右侧按钮 -- 不能购买
            Row() {
              Button('查看类似商品')
                .width(170)
                .height(40)
                .backgroundColor('#ffcc00')
                .fontSize(14)
                .fontWeight(600)
            }
          }
        }
        .width('100%')
        .height(60)
        .backgroundColor('#f7f7f7')
        .padding({left: 20, right: 10})


        // 消息提示:库存 <= 0 显示,否则隐藏
        if (this.count <= 0) {
          Row() {
            // 左侧
            Row({ space: 5 }) {
              Image($r('app.media.ic_lingdang'))
                .width(12)
                .fillColor('#de6a1c')
              Text('该商品暂时没有库存,看看相似商品吧')
                .fontSize(10)
                .fontColor('#de6a1c')
            }


            // 右侧
            Image($r('app.media.ic_shangjiantou'))
              .width(15)
              .padding(3)
              .fillColor('#d0662c')
              .backgroundColor('rgba(0,0,0,0.1)')
              .borderRadius(8)
          }
          .width('100%')
          .height(36)
          .backgroundColor('#fbf9da')
          .position({ x: 0, y: '-36' })
          .padding({ left: 20, right: 20 })
          .justifyContent(FlexAlign.SpaceBetween)
        }


      }
      .position({x:0,y:'100%'})
      .translate({y: '-100%'})
    }
    .width('100%')
    .height('100%')
    .padding({bottom:20})
    .backgroundColor('#f2f2f2')
  }
}

效果图:

七.语句-循环语句

1.while循环语句

作用:重复执行指定的一段代码。

语法:

while (条件){
  条件为真=>重复执行的代码
}

示意:

let i:number = 1
while (i<=18){
  console.log('小明已经'+i+'岁了')
  i++
}
console.log('小明在十八岁那年去世了')

2.for循环语句

作用:重复执行指定的一段代码。

for (初始值;条件;变化量){
  重复执行的代码
}

示意:

for (let jindu:number = 0;jindu<=100;jindu=jindu+10){
  console.log('蛋糕的制作已经完成了'+jindu+'%')
}

3.退出循环

作用:满足指定条件,可以退出循环

→break:终止整个循环

→continue:退出当前一次循环的执行,继续执行下一次循环

代码示意:

for (let num:number = 0;num<20;num++){
  if(num==8){
    console.log('数字增加到八,退出本次循环')
    continue
  }
  if (num==15){
    console.log('数字增加到15,结束本循环')
    break
  }
  console.log('按例执行num增加操作'+num)
}

4.遍历数组-for

遍历:将数组里面的每个数据,按顺序访问一遍

代码示意:

let names:string[] = ['刘小备','吕小布','张大飞','牛大马','飞飞鱼']
for (let i:number = 0;i<names.length;i++){
  console.log('数组内第'+i+'个数据为'+names[i])
}

5.遍历数组-for...of

语法:

for(let item of 数组名){}

→for...of:在...之中进行循环

→item:声明的一个变量,用来在循环的时候接受每一个数组元素

代码示意:

let names:string[] = ['刘小备','吕小布','张大飞','牛大马','飞飞鱼']
for(let item of names){
  console.log('数组数据'+item)
}

八.对象数组

代码示意:

//1.定义接口
interface Person{
  stuId:number
  name:string
  gender:string
  age:number
}
//2.基于接口构建对象
let p1:Person ={
  stuId:1,
  name:'小丽',
  gender:'女',
  age:12
}
//3.基于接口构建对象数组
let pArr:Person[]=[
  {stuId:1,name:'小丽',gender:'女',age:12},
  {stuId:2,name:'小怪',gender:'男',age:13},
  {stuId:3,name:'小黑',gender:'女',age:14},
  {stuId:4,name:'小菜',gender:'男',age:15}
]
console.log('人数组',pArr)
//对象不能在日志里直接打印,如果想在日志中打印,需要转成字符串格式
//JSON.stringify(复杂类型) 对象/数组
console.log('人数组',JSON.stringify(pArr))

//4.具体使用
console.log('小怪',pArr[1].name)
//5.支持遍历
for (let item of pArr){
  console.log('每一项',JSON.stringify(item))
}

九.ForEach-渲染控制

作用:ForEach可以基于数组的个数、渲染组件的个数(简化代码)

代码示意;

@Entry
@Component
struct Index {
  @State titles:string[] = ['电子产品','精品服饰','母婴产品','影音娱乐','海外旅游','自助河马']
  build() {
    Column(){
      ForEach(this.titles,(item:string,index:number)=>{
        Text(`${index + 1} ${item}`)
          .fontSize(24)
          .fontWeight(700)
          .fontColor(Color.Orange)
          .width('100%')
          .padding(15)
      })
    }
  }
}

感谢阅读。

标签:console,log,05,星河,width,while,num,let,数组
From: https://blog.csdn.net/Bew1tch/article/details/142073281

相关文章

  • 【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现
    序言:本文综合了前五次笔记的知识内容,完成了相对来说较为复杂的生肖抽奖卡案例,通过拆分和一步步的思路分析完成本案例,通过完成这次案例,笔者可以说是把前面的所有内容或多或少的都有所复习,特此分享给大家。笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法......
  • stm32 I2C通信与MPU6050(软件I2C读写MPU6050)
    理论1.同步时序与异步时序同步时序和异步时序是信号传输和时序控制中的两种基本类型:同步时序:定义:所有信号变化都与一个共同的时钟信号同步。所有的数据传输和处理操作都在时钟信号的边沿触发。优点:时序控制较为简单,易于设计和调试。系统的整体时序一致性高,适用于高精度要......
  • Contest7685 - 综合训练-105
    题目按难度顺序排序。C合体原题:P3147[USACO16OPEN]262144P\(O(n\times(V+\logn))\)TODO:\(O(n\logn)\)TODO:\(O(n)\)TODO:A迷宫设计注意到题目是特殊性质的最小生成树问题。直接Kruskal能获得没有什么分数的好成绩。注意到,根据Kruskal算法的过程,每次选......
  • 【卷起来】VUE3.0教程-05-侦听器
    =========各位看官,在开始学习之前,请帮我点个关注和赞吧========== ......
  • 05 对象建模技术OMT
    对象建模技术(ObjectModelingTechnique,简称OMT)是一种面向对象的软件开发方法学,由JamesRumbaugh开发,并以其图形化建模和系统化的设计方法著称。OMT方法的核心目标是帮助开发者清晰地描述和设计面向对象系统。以下是对OMT技术的详细解析:一、基本概念定义:对象建模技术是一种面向......
  • 计算机毕业设计必看必学!! 88705 SpringBoot社区配送服务系统小程序,原创定制程序, jav
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,社区当然也不例外。社区配送服务系统小程序是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进......
  • MDX61B0005-5A3-4-0T伺服驱动电影逆变器
    MDX61B0005-5A3-4-0T伺服驱动电影逆变器MDX61B0005-5A3-4-0T伺服驱动电影逆变器MDX61B0005-5A3-4-0T伺服驱动电影逆变器MDX61B0005-5A3-4-0T伺服驱动SEW说明书MDX61B0005-5A3-4-0T伺服驱动SEW线路图MDX61B0005-5A3-4-0T伺服驱动SEW引脚功能MDX61B0005-5A3-4-0T在伺服驱动......
  • 安防监控/视频汇聚平台EasyCVR无法启动并报错“error while loading shared libraries
    安防监控/视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作,用户可以轻松地进行远程视频监控、存储和查看,满足各种复杂场景下的监控需求。流媒体音视......
  • cross-plateform 跨平台应用程序-05-Flutter 介绍
    跨平台系列cross-plateform跨平台应用程序-01-概览cross-plateform跨平台应用程序-02-有哪些主流技术栈?cross-plateform跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?cross-plateform跨平台应用程序-04-ReactNative介绍cross-plateform跨平台应用程序-05-Flut......
  • 51nod 1051 最大子矩阵和
    51nod1051最大子矩阵和可以用前缀和容斥优化到\(O(n^4)\),但是不够进行如下图操作:将每一列的数值都压缩到一维的数组上,就转换为求最大字段和问题,时间复杂度\(O(n^3)\)。看看代码就知道了。#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintn,m;......