「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系统&…

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 类构造函数 & 析构函数的相关内容…

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;记…

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

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

function and task

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

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

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

类与实例

1 问题如何理解类与实例&#xff1f; 2 方法 类与实例 类(class)的概述&#xff1a;用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类是一类事物&#xff0c;实例是具体的一个事物。 编程与生活是相通的&#xff0…

2024/11/4 计网强化

10: 17: 22: 09: 11: 12: 13&#xff1a; 14&#xff1a; 15&#xff1a; 18&#xff1a; 19&#xff1a; 20: 21: 16:

力扣104 : 二叉树最大深度

补&#xff1a;二叉树的最大深度 描述&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 何解&#xff1f; 树一般常用递归&#xff1a;递到叶子节点开始倒着处理

机器情绪及抑郁症算法

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日17点02分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17230869054974 计算机来理解你的情绪&a…

JAVA学习日记(十五) 数据结构

一、数据结构概述 数据结构是计算机底层存储、组织数据的方式。 数据结构是指数据相互之间以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择。 二、常见的数据结构 &#xff08;一&#xff09;栈 特点&…