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

ops/2024/11/14 6:38:23/

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

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

一、for-in 表达式

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

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

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

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

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

输出:

任务执行
任务执行

2.2 迭代变量不可修改

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

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

2.3 使用 where 条件

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

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

输出:

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

三、for-in 表达式的应用示例
3.1 示例:遍历学生成绩并输出及格与否(使用元组数组)
cangjie">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 示例:遍历数组并计算总和
cangjie">main(): Int64 {let numbers = [3, 5, 7, 9]var total = 0for (num in numbers) {total += num}println("数组总和为:${total}")return 0
}

输出:

数组总和为:24

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

输出:

1
2
3
4
5

3.4 示例:遍历元组并计算单价和总价
cangjie">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 示例:找到负数后终止循环
cangjie">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 示例:跳过偶数并继续循环
cangjie">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.ppmy.cn/ops/133486.html

相关文章

⚙️ 如何调整重试策略以适应不同的业务需求?

调整 Kafka 生产者和消费者的重试策略以适应不同的业务需求&#xff0c;需要根据业务的特性和容错要求来进行细致的配置。以下是一些关键的调整策略&#xff1a; 业务重要性&#xff1a; 对于关键业务消息&#xff0c;可以增加重试次数&#xff0c;并设置较长的重试间隔&#x…

【计算机网络】【传输层】【习题】

计算机网络-传输层-习题 文章目录 10. 图 5-29 给出了 TCP 连接建立的三次握手与连接释放的四次握手过程。根据 TCP 协议的工作原理&#xff0c;请填写图 5-29 中 ①~⑧ 位置的序号值。答案技巧 注&#xff1a;本文基于《计算机网络》&#xff08;第5版&#xff09;吴功宜、吴英…

PHP接口安全的机制

PHP接口安全的机制是一个多层次、综合性的防护体系&#xff0c;旨在确保接口数据的安全性和完整性。以下是对PHP接口安全机制的详细简述&#xff1a; 一、身份验证与授权 Token授权机制&#xff1a; 用户使用用户名和密码登录后&#xff0c;服务器会生成一个Token并返回给客户…

数据结构题集-第二章-线性表-有序单链表的交集

有序单链表的交集 说明2.26 假设两个元素依值递增有序排列的单链表A和B 说明 本文参照严蔚敏《数据结构(C语言版)题集》一书中包含的问答题和算法设计题目&#xff0c;提供解答和算法的解决方案。请读者在自己已经解决了某个题目或进行了充分的思考之后&#xff0c;再参考本解…

XMLHttpRequest以及Promise对象的使用

AJAX原理 通过[XHR]XMLHttpRequest对象来和服务器进行交互&#xff0c;axios库的底层也是通过XMLHttpRequest来和服务器进行交互&#xff0c;只是将实现细节进行了封装&#xff0c;让操作更加简洁 可以用于某些只需和服务器进行少次交互的静态网站进行使用&#xff0c;减少代…

three.js 杂记

clip&#xff1a; 1&#xff1a; 着色器 #ifdef USE_CLIP_DISTANCE vec4 worldPosition modelMatrix * vec4( position, 1.0 ); gl_ClipDistance[ 0 ] worldPosition.x - sin( time ) * ( 0.5 ); #endif gl_Position projectionMatrix * modelViewMatrix * vec4( positio…

CNN中每一层的权重是一样的么?

在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;每一层的权重并不是完全相同的&#xff0c;但在同一层内是共享的。具体来说&#xff0c;CNN的权重共享机制是指&#xff1a;在卷积层中&#xff0c;同一卷积核&#xff08;filter&#xff09;在输入图像的不同区域进行…

微擎框架php7.4使用phpexcel导出数据报错修复

在使用微擎社区版时&#xff0c;用phpexcel导出数据&#xff0c;提示错误&#xff0c;经过搜索后得知是php版本问题。 之前一直是用的5.6现在改成了7.4。所以才发现了这个问题。 然后去gitee上看了下微擎官方的代码&#xff0c;好像也没有对这个问题进行修复。 找了下&#…