鸿蒙OS应用开发之语句

在程序开发中,已经有上面的运算符和数据类型了,可以满足了大部的需求,但是这些程序还是比较简单的计算和逻辑运算,如果需要复杂的计算和逻辑处理,就需要采用复杂逻辑程序块来处理了,也就是复杂条件语句才能解决。主要的语句有条件语句、switch语句、条件表达式语句、for循环语句、for-of语句、while语句、Do-while语句、Break语句、Continue语句、Throw和Try语句。

If语句

if语句用于需要根据逻辑条件执行不同语句的场景。当逻辑条件为真时,执行对应的一组语句,否则执行另一组语句(如果有的话)。 else部分也可能包含if语句。

if (condition1) {

  // 语句1

} else if (condition2) {

  // 语句2

} else {

  // else语句

}

采用的形式如上所示。

但是可以有几种形式,第一种形式:

这种只有if语句部分,并没有else部分。

第二种形式:

这里有if部分和else部分,

最后一种形式就是if和else嵌套形式:

通过if-else语句,就可以执行复杂的逻辑语句,因为每一个大括号里都是一块更加复杂的语句,这样就可以不断一层一层判断,就可以解决更多的逻辑处理问题。不过在编程时要注意嵌套的层次,一般不要超过三层的嵌套,如果要超过这个,就需要分成不同的函数来嵌套调用。

条件语句是使用比较多的语句,毕竟很多判断选择都需要使用它。

Switch语句

使用switch语句来执行与switch表达式值匹配的代码块。这种情况一般是一个变量存在多个状态,选择其中一个执行。特别适合状态机这样处理,又或者适合减少if语句的编写。像状态机多层状态的选择就比较容易理解。

switch (expression) {

  case label1: // 如果label1匹配,则执行

    // ...

    // 语句1

    // ...

    break; // 可省略

  case label2:

  case label3: // 如果label2或label3匹配,则执行

    // ...

    // 语句23

    // ...

    break; // 可省略

  default:

    // 默认语句

}

下面的例子:

switch表达式的类型必须是number、enum或string。

label必须是常量表达式或枚举常量值。

如果switch表达式的值等于某个label的值,则执行相应的语句。

如果没有任何一个label值与表达式值相匹配,并且switch具有default子句,那么程序会执行default子句对应的代码块。

break语句(可选的)允许跳出switch语句并继续执行switch语句之后的语句。

如果没有break语句,则执行switch中的下一个label对应的代码块。

条件表达式

条件表达式由第一个表达式的布尔值来决定返回其它两个表达式中的哪一个。

condition ? expression1 : expression2

例子如下:

条件表达式比较适合用来判断大小的情况。或者简短的条件选择,不用写if语句这么复杂的情况。

For语句

for语句会被重复执行,直到循环退出语句值为false。

循环语句是比较常用的语句,毕竟很多数据的处理都是一个队列,或者列表,那么就需要遍历检查它是否满足某种情况。

比如下面的例子:

for循环语句的形式:

for ([init]; [condition]; [update]) {

  statements

}

for语句的执行流程如下:

1、 执行init表达式(如有)。此表达式通常初始化一个或多个循环计数器。

2、 计算condition。如果它的值为true(或者没有该语句),则执行循环主体的语句。如果它的值为false,则for循环终止。

3、 执行循环主体的语句。

4、 如果有update表达式,则执行该表达式。

5、 回到步骤2。

For-of语句

使用for-of语句可遍历数组或字符串。示例如下:

for (forVar of expression) {

  statements

}

具体的例子如下:

While语句

只要condition的值为true,while语句就会执行statements语句。示例如下:

while (condition) {

  statements

}

例子如下:

基中条件部分是一个逻辑表达式。

Do-while语句

在condition的值为false之前,statements语句会重复执行。示例如下:

do {

  statements

} while (condition)

这种情况是先执行复杂语句,再判断条件,而while语句是先判断条件再执行复合语句。

Break语句

使用break语句可以终止循环语句或switch。

前面已经在switch里使用了,用于跳出每一个分支情况。它还可以使用在循环里,可以提前跳出循环,比如循环执行一半,再判断满足了条件,如果没有break语句,就没有办法提前退出循环了。

上面的例子就是提前退出了循环,由于这个循环是一个无穷的循环,如果没有退出语句,就没有办法这样编写了。

如果break语句后带有标识符,则将控制流转移到该标识符所包含的语句块之外。

let x = 1

label: while (true) {

  switch (x) {

    case 1:

      // statements

      break label // 中断while语句

  }

}

Continue语句

continue语句会停止当前循环迭代的执行,并将控制传递给下一个迭代。

let sum = 0

for (let x = 0; x < 100; x++) {

  if (x % 2 == 0) {

    continue

  }

  sum += x

}

在上面的循环里,执行到continue语句时,就会提前结束当前循环,不再执行后面的sum += x的语句。

Throw和Try语句

throw语句用于抛出异常或错误:

throw new Error('this error')

try语句用于捕获和处理异常或错误:

try {

  // 可能发生异常的语句块

} catch (e) {

  // 异常处理

}

支持finally语句:

function processData(s: string) {

  let error: Error | null = null

  try {

    console.log('Data processed: ', s)

    // ...

    // 可能发生异常的语句

    // ...

  } catch (e) {

    error = e as Error

    // ...

    // 异常处理

    // ...

  } finally {

    if (error != null) {

      console.log(`Error caught: input='${s}', message='${error.message}'`)

    }

  }

}

到这里就学习完成基本的语句,这些需要经常练习才能合适地使用它。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【9】Spring Boot 3 集成组件 : 基于spring security的认证权限开发【认证】

目录 【9】Spring Boot 3 集成组件 &#xff1a; 基于spring security的用户权限系统【认证】认证和权限流程【理论】认证授权鉴权权限控制认证、授权、鉴权、和权限控制关系认证和鉴权的关系 认证流程【理论】1. 直接携带认证令牌访问资源2. Session认证机制3. Jwt认证机制下的…

单调栈结构

单调栈 单调栈是一种特殊设计的栈结构&#xff0c;为了解决如下的问题&#xff1a; 给定一个可能含有重复数值的 arr[]&#xff0c;i位置的数一定存在如下两种信息&#xff1a; arr[i]的左侧离 i 最近并且小于&#xff08;或者大于&#xff09;arr[i] 的数在哪&#xff1f;arr…

JVM虚拟机系统性学习-运行时数据区(堆)

运行时数据区 JVM 由三部分组成&#xff1a;类加载系统、运行时数据区、执行引擎 下边讲一下运行时数据区中的构成 根据线程的使用情况分为两类&#xff1a; 线程独享&#xff08;此区域不需要垃圾回收&#xff09; 虚拟机栈、本地方法栈、程序计数器 线程共享&#xff08;数…

二叉搜索树中第K小的元素[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉搜索树的根节点root&#xff0c;和一个整数k&#xff0c;请你设计一个算法查找其中第k个最小元素&#xff08;从1开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#x…

编译Android14 AOSP原生代码并运行X86模拟器镜像过程记录

最近在研究Android Entreprise部分的特性&#xff0c;需要在Android手机上分析WorkProfile相关的源码&#xff0c;因为新买的Pixel样机还未到货&#xff0c;看了几天Android源码&#xff0c;迫切需要上真机对比分析。 又听说最近几年Android模拟器已经有些进步&#xff0c;至少…

【利用二手车数据进行可视化分析】

利用二手车数据进行可视化分析 查看原始数据去除重复数据需求分析1.统计全国总共有多少量二手车&#xff0c;用KPI图进行展示2.统计安徽总共有多少量二手车&#xff0c;用KPI图进行展示3.统计合肥总共有多少量二手车&#xff0c;用KPI图进行展示4.取最贵的10辆二手车信息&#…

游戏提示找不到d3dx10_43.dll怎么办?5种方法教你如何修复

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“缺少d3dx10_43.dll文件”。这个错误提示通常出现在运行某些游戏或应用程序时&#xff0c;它意味着系统无法找到所需的动态链接库文件。本文将详细介绍d3dx10_43.dll文件的作用以及导致其丢…

class066 一维动态规划【算法】

class066 一维动态规划 算法讲解066【必备】从递归入手一维动态规划 code1 509斐波那契数列 // 斐波那契数 // 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 // 该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。…

从关键新闻和最新技术看AI行业发展(2023.11.20-12.3第十一期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

睡觉时总在凌晨3、4点醒来,再无睡意,一般暗示四大疾病,别忽视!

良好的睡眠是人体健康的重要因素&#xff0c;正常情况下的八小时睡眠时间在人们一天的时间中占比三分之一&#xff0c;睡眠是人体器官进行自我修复和调整的关键时间&#xff0c;睡眠质量不好&#xff0c;则会影响各个器官的健康&#xff0c;人们可以从睡眠中发现身体的异常&…

常见web漏洞的流量分析

常见web漏洞的流量分析 文章目录 常见web漏洞的流量分析工具sql注入的流量分析XSS注入的流量分析文件上传漏洞流量分析文件包含漏洞流量分析文件读取漏洞流量分析ssrf流量分析shiro反序列化流量分析jwt流量分析暴力破解流量分析命令执行流量分析反弹shell 工具 攻击机受害机wi…

midwayjs从零开始创建项目,连接mikro-orm框架(必须有java的springboot基础)

前言&#xff1a; 我一直都是用java的springboot开发项目&#xff0c;然后进来新公司之后&#xff0c;公司的后端是用node.js&#xff0c;然后框架用的是 midwayjs &#xff0c;然后网上的资料比较少&#xff0c;在此特地记录一波 文档&#xff1a; 1.官方文档&#xff1a;介绍…

Linux C/C++ 从内存转储中恢复64位ELF可执行文件

ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义ELF&#xff08;Executable and Linking Format&#xff09;是一种对象文件的格式&#xff0c;它主要用于定义不同类型的对象文件中的内容以及它们的存储方式。一个EL…

深入了解对象与内置构造函数

1. 深入对象 1.1 创建对象的三种方式 1.2 构造函数 语法约定&#xff1a; 总结 构造函数可以快速创建多个对象大写字母开头的函数使用new关键字将对象实例化构造函数不需要返回值自动返回新的对象 new实例化的执行过程 创建空对象this指向对象执行代码&#xff0c;追加新…

class069 从递归入手三维动态规划【算法】

class069 从递归入手三维动态规划 code1 474. 一和零 // 一和零(多维费用背包) // 给你一个二进制字符串数组 strs 和两个整数 m 和 n // 请你找出并返回 strs 的最大子集的长度 // 该子集中 最多 有 m 个 0 和 n 个 1 // 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是…

SVN修改已提交版本的日志方法

1.在工做中一直是使用svn进行項目的版本控制的&#xff0c;有时候因为提交匆忙&#xff0c;或是忘了添加Log&#xff0c;或是Log内容有错误。遇到此类状况&#xff0c;想要在查看项目的日志时添加log或是修改log内容&#xff0c;遇到以下错误&#xff1a; Repository has not b…

2023最新最全【Wireshark 】 安装教程(附安装包)

简介 wireshark是非常流行的网络封包分析工具&#xff0c;功能十分强大。可以截取各种网络封包&#xff0c;显示网络封包的详细信息。使用wireshark的人必须了解网络协议&#xff0c;否则就看不懂wireshark了。 为了安全考虑&#xff0c;wireshark只能查看封包&#xff0c;而…

公式识别任务各个链条全部打通

目录 引言公式识别任务是什么&#xff1f;公式识别任务解决方案初探使用建议写在最后 引言 随着LaTeX-OCR模型转换问题的解决&#xff0c;公式识别任务中各个链条已经全部打通。小伙伴们可以放开膀子干了。 解决业界问题的方案&#xff0c;并不是单独训练一个模型就完事了&am…

汽车网络安全--关于UN R155认证的思考

1.UN R155概述 2020年6月25日,联合国颁布了全球首个汽车网络安全强制性法规 -- UN 155,详细规定了关于评估网络安全措施的审核条款、制造商和供应商降低网络安全风险的方法以及实施风险评估的义务等。 法规适用于与信息安全相关的M类(4轮及以上载客汽车)、N类(四轮载货汽车)…

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;不要在乎别人怎么看你&#xff0c;因为他们根本就没有时间&#xff0c;他们只关心他们自己。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…