鸿蒙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}'`)

    }

  }

}

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

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

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

相关文章

【W5500】关于使用外部网络变压器的原理图设计

直接上原理图 链接也放一个吧【链接】 按照这个画&#xff0c;我实验在立创EDA上打了一个实验过是可以用的~ 画出来的板子长这个样子【就不公开原理图和PCB了&#xff0c;这个板子还是很容易画的】~ 注意在立创上找对网口&#xff0c;要无变压器的网口&#xff0c;相比TB卖的那…

小模型学习(1)-人脸识别

【写作背景】因为最近一直在研究大模型&#xff0c;在与客户进行交流时&#xff0c;如果要将大模型的变革性能力讲清楚&#xff0c;就一定要能将AI小模型的一些原理和效果讲清楚&#xff0c;进而形成对比。当然这不是一件简单的事情&#xff0c;一方面大模型分析问题的的本质原…

19 redis缓存数据同步问题

1、缓存穿透 指缓存和数据库中都没有的数据&#xff0c;而用户不断发起请求。由于缓存不命中&#xff0c;并且出于容错考虑&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到存储层去查询&#xff0c;缓存就没有意义了。 在…

C语言精选——选择题Day42

第一题 1. 下面程序输出的结果是&#xff08;&#xff09; #include <stdio.h> int main () {int x;x printf("I See, Sea in C");printf("x%d" , x); } A&#xff1a;2 B&#xff1a;随机值 C&#xff1a;都不是 D&#xff1a;15 答案及解析 D p…

7.题目:编号1531 快递分拣

题目: ### 这道题主要考察map,vector,string的综合运用单号和城市都可以用string类型存储 #include <bits/stdc.h> using namespace std;map<string,vector<string>> mp;vector<string> citys;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.t…

猿人学第三题 罗生门

思路 使用开发者工具进行抓包&#xff0c;验证数据请求的方式是什么&#xff0c;这里推荐大家使用浏览器自带的工具。 我们发现每次的翻页请求都会有一个jssm请求&#xff0c;这里我们先记录一下这个情况&#xff0c;现在观察一下cookie是否有变化。 这个实际上没有发生变化。…

最长连续序列(leetcode 128)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;排序方法二&#xff1a;哈希表 5.实现示例参考文献 1.问题描述 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你…

见微知著-从底层代码一撇Qt的控件绘图

Qt 是目前C语言首选的框架库。之所以称为框架库而不单单是GUI库&#xff0c;是因为Qt提供了远远超过GUI的功能封装&#xff0c;即使不使用GUI的后台服务&#xff0c;也可以用Qt大大提高跨平台的能力。 仅就界面来说&#xff0c;Qt 保持各个平台绘图等效果的统一&#xff0c;并…

不想写大量 if 判断?试试用规则执行器优化,就很丝滑!

近日在公司领到一个小需求&#xff0c;需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示: if (是否海外用户) {return false; }if (刷单用户) {return false; }if (未付费用户 && 不再服务时段) {return false }if (转介绍用户 || 付费用户 || 内推…

Terminator的layout设置(一个新的一键启动思路)

首先你得有terminator&#xff1a; sudo apt install terminator然后就能使用了&#xff0c;我一般喜欢修改它原本的水平和垂直分割&#xff1a;用ctrlshifta和ctrlshifts 把屏幕先分成多块&#xff1a; 比如是这样的&#xff0c;接下来 右键->点击Preference 弹框中上方标…

LVGL | Demo实例使用说明

LVGL | Demo实例使用说明 时间&#xff1a;2023年12月10日21:51:17 文章目录 LVGL | Demo实例使用说明Demos for LVGLAdd the examples to your projectsDemosWidgetsMusic playerKeypad and encoderBenchmarkStress Contributing Demos for LVGL Add the examples to your p…

[山东大学操作系统课程设计]实验四+实验五

0.写在前面&#xff1a; 为什么这次把两个实验放在一起写了&#xff0c;因为实验五的要求就是在实验四的基础上完成实现的。但是我得实现说明&#xff0c;我的实验四虽然完成了要求&#xff0c;但是无法在我自己的实验四的基础上完成实验五&#xff0c;这是一个很大的问题&…