「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)

本篇继续深入介绍 for-in 循环的用法,并探讨 breakcontinue 控制结构的应用,帮助优化程序流程。

关键词
  • Cangjie控制结构
  • Cangjie循环语句
  • for-in
  • 控制转移
  • 程序优化

一、for-in 表达式

for-in 表达式用于遍历扩展了迭代器接口 Iterable 的类型实例。在Cangjie中,for-in 适用于遍历数组、元组等数据类型。

1.1 基本形式
for (迭代变量 in 序列) {循环体
}
1.2 执行规则
  1. 计算序列表达式,初始化迭代器。
  2. 更新迭代器:
    • 如果迭代器终止,结束循环;
    • 否则,将当前迭代器值绑定到迭代变量,并执行循环体。
  3. 重复步骤2,直至遍历结束。

二、for-in 的灵活用法
2.1 使用通配符 _ 代替迭代变量

在某些情况下,for-in 循环中不需要使用迭代变量时,可以使用通配符 _ 代替,避免未使用变量的警告。

2.1.1 示例:重复执行任务不使用迭代变量
for (_ in 1..3) {println("任务执行")
}

输出:

任务执行
任务执行

2.2 迭代变量不可修改

for-in 循环中,迭代变量是只读的,试图修改迭代变量会导致编译错误。

2.2.1 示例:错误的迭代变量修改
for (i in 0..3) {i = i + 1  // 错误:迭代变量不可修改
}

2.3 使用 where 条件

where 条件可用于过滤迭代项,只有满足条件的项才会进入循环体。

2.3.1 示例:过滤奇数
for (i in 1..10 where i % 2 != 0) {println("奇数:${i}")
}

输出:

奇数:1
奇数:3
奇数:5
奇数:7
奇数:9

三、for-in 表达式的应用示例
3.1 示例:遍历学生成绩并输出及格与否(使用元组数组)
main(): Int64 {let scores = [("张三", 80), ("李四", 65), ("王五", 55)]for ((student, score) in scores) {if (score >= 60) {println("${student} 的成绩是 ${score},及格")} else {println("${student} 的成绩是 ${score},不及格")}}return 0
}

输出:

张三 的成绩是 80,及格
李四 的成绩是 65,及格
王五 的成绩是 55,不及格

3.2 示例:遍历数组并计算总和
main(): Int64 {let numbers = [3, 5, 7, 9]var total = 0for (num in numbers) {total += num}println("数组总和为:${total}")return 0
}

输出:

数组总和为:24

3.3 示例:遍历数字并打印
main(): Int64 {let numbers = [1, 2, 3, 4, 5]for (num in numbers) {println(num)}return 0
}

输出:

1
2
3
4
5

3.4 示例:遍历元组并计算单价和总价
main(): Int64 {let items = [(2, 15), (3, 30), (1, 10)]var totalPrice = 0for ((quantity, price) in items) {totalPrice += quantity * price}println("总价格为:${totalPrice}")return 0
}

输出:

总价格为:130

四、控制转移表达式

在循环结构中,有时需要提前结束循环或跳过当前循环,可以使用 breakcontinue 表达式。这些控制转移表达式使得程序更加灵活。

4.1 break 表达式

break 用于提前终止当前循环,跳出循环体,继续执行循环之后的代码。

4.1.1 示例:找到负数后终止循环
main(): Int64 {let numbers = [10, 20, -5, 40, 50]for (num in numbers) {if (num < 0) {println("找到负数:${num}")break}println("当前数字:${num}")}return 0
}

输出:

当前数字:10
当前数字:20
找到负数:-5

4.2 continue 表达式

continue 用于跳过当前循环的剩余部分,直接进入下一轮循环。

4.2.1 示例:跳过偶数并继续循环
main(): Int64 {let numbers = [1, 2, 3, 4, 5]for (num in numbers) {if (num % 2 == 0) {continue}println("奇数:${num}")}return 0
}

输出:

奇数:1
奇数:3
奇数:5

小结

本节通过多个实例详细介绍了 for-in 循环的多种应用场景,并补充了 breakcontinue 在Cangjie中的灵活用法。这些控制结构帮助开发者更好地管理程序流程,优化代码逻辑。


下篇预告

下一篇将探讨Cangjie中的函数与方法,涵盖函数的定义、参数传递、返回值等内容,帮助实现代码的模块化和复用。


上一篇: 「Mac玩转仓颉内测版6」入门篇6 - Cangjie控制结构(中)
下一篇: 「Mac玩转仓颉内测版8」入门篇8 - Cangjie函数与方法

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=124
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


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

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

相关文章

软件工程概论项目(二),node.js的配置,npm的使用与vue的安装

上一章我们配置了git仓库&#xff0c;这一章我们来配置项目需要用的一些其他的环境。 放一个思维导图在这里&#xff0c;可以参考一下&#xff0c;很不全面&#xff0c;没有参考价值,反正我先这样写吧。 参考了这个nodejs的配置&#xff0c;写的很好&#xff1a;https://blog.c…

什么是crm?3000字详细解析

在现代商业环境中&#xff0c;客户关系管理&#xff08;CRM&#xff09;已经成为企业驱动成功的关键工具。在复杂且竞争激烈的市场中&#xff0c;如何有效地管理客户关系、提升客户满意度&#xff0c;并增加客户忠诚度&#xff0c;越来越成为企业迫切关心的问题。而CRM系统&…

中心极限定理的三种形式

独立同分布的中心极限定理&#xff1a; 设 X 1 , X 2 , … , X n X_1, X_2, \ldots, X_n X1​,X2​,…,Xn​是独立同分布的随机变量序列&#xff0c;且 E ( X i ) μ E(X_i) \mu E(Xi​)μ&#xff0c; D ( X i ) σ 2 > 0 D(X_i) \sigma^2 > 0 D(Xi​)σ2>0存在…

3.1_文件上传漏洞

文件上传漏洞 文件上传漏洞原理&#xff1a;未对用户提交的文件进行严格校验&#xff0c;就将恶意文件解析执行&#xff0c;导致用户可以提交恶意的文件进行攻击&#xff1b; 利用方式&#xff08;危害&#xff09;&#xff1a; 1&#xff09;. 上传 HTML/SVG 进行 XSS 攻击&…

C++入门基础知识140—【关于C++ 类构造函数 析构函数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 类构造函数 & 析构函数的相关内容…

前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨

文章目录 前言一、React.js特点使用方法适用场景 二、Vue.js特点使用方法适用场景 三、Angular特点使用方法适用场景 四、如何选择合适的前端框架五、前端框架对项目性能的影响结语 前言 随着互联网技术的飞速发展&#xff0c;前端开发已经从简单的页面展示演变为复杂的应用构…

Notepad++的完美替代

由于Notepad的作者曾发表过可能在开发者代码中植入恶意软件的言论&#xff0c;他备受指责。在此&#xff0c;我向大家推荐一个Notepad的完美替代品——NotepadNext和Notepad--。 1、NotepadNext NotepadNext的特点&#xff1a; 1、跨平台兼容性 NotepadNext基于Electron或Qt…

为什么RNN(循环神经网络)存在梯度消失和梯度爆炸?

1️⃣ 原理分析 RNN前向传播的公式为&#xff1a; x t x_t xt​是t时刻的输入 s t s_t st​是t时刻的记忆&#xff0c; s t f ( U ⋅ x t W ⋅ s t − 1 ) s_tf(U\cdot x_tW\cdot s_{t-1}) st​f(U⋅xt​W⋅st−1​)&#xff0c;f表示激活函数&#xff0c; s t − 1 s_{t-1} …

NUXT3学习日记二(样式配置、引入组件库、区分在服务端还是在客户端渲染)

上一章已经给大家分享官网下载的nuxt3了&#xff0c;下面正式进入我所要说的内容吧 一、初始化样式 想必大家从我的git下载下来的nuxt3&#xff0c;能看到nuxt.config.ts这个文件了吧。 这里我们有两种css配置方式 1、css:[~/assets/base.scss] 这种方式不能在scss文件中定义…

2024AAAI | DiffRAW: 利用扩散模型从手机RAW图生成单反相机质量的RGB图像

文章标题&#xff1a;《DiffRAW: Leveraging Diffusion Model to Generate DSLR-Comparable Perceptual Quality sRGB from Smartphone RAW Images》 原文链接&#xff1a;DiffRAW 本文是清华大学深圳研究院联合华为发表在AAAI-2024上的论文&#xff08;小声bb&#xff1a;华…

计算机视觉 ---图像模糊

1、图像模糊的作用&#xff1a; 减少噪声&#xff1a; 在图像获取过程中&#xff0c;例如通过相机拍摄或者传感器采集&#xff0c;可能会受到各种因素的干扰&#xff0c;从而引入噪声。这些噪声在图像上表现为一些孤立的、不符合图像主体内容的像素变化&#xff0c;如椒盐噪声&…

串口DMA接收不定长数据

STM32F767—&#xff1e;串口通信接收不定长数据的处理方法_stm32串口超时中断-CSDN博客 STM32-HAL库串口DMA空闲中断的正确使用方式解析SBUS信号_stm32 hal usart2 dma-CSDN博客 #define USART1_RxBuffSize 100 extern DMA_HandleTypeDef hdma_usart1_rx; //此处声明的变量在…

web实验3:虚拟主机基于不同端口、目录、IP、域名访问不同页面

创建配置文件&#xff1a; 创建那几个目录及文件&#xff0c;并且写内容&#xff1a; 为网卡ens160添加一个 IPv4 地址192.168.234.199/24: 再重新激活一下网卡ens160&#xff1a; 重启服务&#xff1a; 关闭防火墙、改宽松模式&#xff1a; 查看nginx端口监听情况&#xff1a;…

Jmeter中的监听器(二)

5--JSR223 Listener 用途 自定义数据处理&#xff1a;使用脚本语言处理测试结果&#xff0c;实现高度定制化的数据处理和分析。实时监控&#xff1a;实时处理和显示测试结果。集成外部系统&#xff1a;将测试结果发送到外部系统进行进一步处理和分析。日志记录&#xff1a;记…

DP动态规划基础题(Kadane算法)

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于优化问题&#xff0c;特别是那…

计算机组成原理——进位计数制

1.认识不同进制 通常的我们日常生活中用到的都是十进制&#xff0c;比如买东西或者期末成绩等等&#xff0c;当然肯定不止这一种进制方法&#xff0c;相关的还有二进制、八进制、十六进制&#xff0c;还有古罗马数字&#xff0c;通常古罗马数字近似可以看作是五进制的数&#x…

《.addClass()》

《.addClass()》 .addClass() 是一个在网页设计和开发中常用的 jQuery 函数,用于向 HTML 元素添加一个或多个类名。这个函数在美化网页、实现动态效果以及改善用户体验方面发挥着重要作用。本文将详细介绍 .addClass() 函数的用法、优势以及在实际开发中的应用案例。 1. .ad…

function and task

任务和函数 在Verilog语言中提供了任务和函数&#xff0c;可以将较大的行为级设计划分为较小的代码段&#xff0c;允许设计者将需要在多个地方重复使用的相同代码提取出来&#xff0c;编写成任务和函数&#xff0c;这样可以使代码更加简洁和易懂。 1.1任务 任务的定义 任务定义…

【C++】用红黑树封装set和map

在C标准库中&#xff0c;set容器和map容器的底层都是红黑树&#xff0c;它们的各种接口都是基于红黑树来实现的&#xff0c;我们在这篇文章中已经模拟实现了红黑树 ->【C】红黑树&#xff0c;接下来我们在此红黑树的基础上来看看如何封装set和map。 一、共用一颗红黑树 我…

4399 C++面试题及参考答案

C 和 C++ 的区别是什么? C 语言是一种过程式编程语言,而 C++ 是在 C 语言基础上发展而来的面向对象编程语言。 从语法层面来看,C 语言没有类和对象的概念。 而在 C++ 中可以定义类,把数据和操作数据的函数封装在一起,像这样: class Point { public:int x;int y;Point(int…