目录

简洁的for循环

循环过程修改循环变量

循环语句

不同编程语言支持的循环语句

foreach

无限循环

for循环历史

break和continue

循环判断结束值

循环标签

循环语句优化

循环表达式返回值


简洁的for循环

如果需要快速枚举一个集合的元素,尽管C语言可以用for (i = 0; i < len; ++i)枚举不同元素,现代编程语言提供了更优雅的做法。

  • ObjC 2.0提供了快速枚举
    for (NSString *str in arr)
  • C++11引入了基于范围的for循环遍历数组或者容器
    for (int i : arr)
  • C#
    foreach (int i in arr)
  • Java
    for (int i : arr)
  • Swift提供for快速遍历,可追加where字句限制循环条件
    for i in 1...5 where i % 2 == 0
  • Kotlin 提供形如 for (i in 1..5) 或 for (i in 1.rangeTo(5)) 简洁的遍历写法。
    • 不包含5的遍历:for (i in 1 until 5)
    • 也提供 形如逆向遍历: for (i in 5 downTo 1)
    • 也可调整step: for (i in 1 until 5 step 2) 遍历1 3
  • 仓颉 提供类似Kotlin简洁且可控循环开始结束和步长的for循环。
    • 从1到9:for (i in 1..10)
    • 从1到10:for (i in 1..=10)
    • 从1到10,步长2:for (i in 1..=10 : 2)
    • 遍历4, 8:for (i in 1..=10 : 2 where i % 4 == 0)

循环过程修改循环变量

  • C# foreach循环期间是不允许修改循环变量(注意是不能修改用于循环的变量,而非每个对象),以避免循环状态不统一。

循环语句

循环语句一般分为while/for/do-while三种。

  • while是if语句重复执行的优化版,如果没有while,就需要用if和goto组合代替。
  • for循环是条件和变化简单的while语句的优化版。

不同编程语言支持的循环语句

  • C/ObjC/C++/Java/C#/Kotlin/仓颉 等都支持上面三种形式。
  • Python 支持for和while语句,不支持do-while语句。
  • Pascal while / for / repeat..until 语句格式示例如下:
    • while i < 10 do begin Writeln(i); i := i + 1; end;
    • for j := 1 to 10 do Writeln(j); 或 for j := 10 downto 1 do Writeln(j);
    • repeat Writeln(i); i := i + 1; until i > 10;

foreach

foreach为了优化处理集合的对象,减少不必要的index++. 一些语言为了更简单,for语句也可实现foreach功能。

  • PHP/Java/C# 等均有foreach的身影。
  • Kotlin的for语句和foreach很像,采用for xxx in yyy形态。Kotlin的forEach和forEachIndexed主要用于集合对象遍历,后者除了可以获取每个元素,还可以获取下标。

无限循环

for(;;)和while(1)都是无限循环。编译器对于二者的处理可能有差,前者可能仅仅用jmp不断重复,后者可能有test/je指令。当然,优秀的编译器应该会最优化指令。

for循环历史

  • 最早ALGOL 58就有for循环的雏形。
  • Fortran 66引入了FOR语句,Fortran 90引入了DO/WHILE语句。
    • for I : = 0 ( 1 ) N;

break和continue

和switch/case语句类似,循环语句一样除了有break跳出,还增加了continue继续判断条件。对于汇编实现,均是jmp或j*系列跳转,并没有多么深奥。

  • C/ObjC/C++/Java/C#/PHP/Kotlin/Python 等均支持break和continue.
  • Fortran 用exit对应break,cycle对应continue.
  • PHP 还支持形如break 3跳出第三层循环这种语句,可以灵活跳转出更高层循环。
  • Kotlin 也支持break和continue跳到特定循环,前提需要在循环开始添加标记,比如loop1@代表loop1循环标记。

循环判断结束值

  • Fortran 提供一种简洁的循环初始、结束、步隔的语法。
    do i = 1, 5, 1
    print *, i
    end do

循环标签

  • Fortran 可以为每个循环语句加上标签,可方便阅读或者跳转。例如:
    loop: do i = 1, 5

循环语句优化

当循环条件每次都不同,执行语句也只依赖条件,是可以并行执行的。

  • Fortran提供了concurrent可让编译器做并行优化。

循环表达式返回值

  • Rust loop表达式默认的break返回是unit类型,但可以用break xx返回xx, 作为loop表达式返回值。


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

1.您还可以访问 迷软科技 网站:https://www.minicoda.com

2.想学习更多知识,您可以关注 微信公众号程序员小迷miniminicode )(一个关注于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift等语言软件开发技能技巧经验的公众号)

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

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

相关文章

RK3568/3588 Android 12 源码默认使用蓝牙mic录音

遇到客户一个需求&#xff0c;如果连接了带mic的蓝牙耳机&#xff0c;默认所有的录音要走蓝牙mic通道。这个功能搞了好久&#xff0c;终于搞定了。1. 向RK寻求帮助&#xff0c;先打通 bt sco能力。此时&#xff0c;还无法默认就切换到蓝牙 mic通道&#xff0c;接下来我们需求默…

解锁HTTP:从理论到实战的奇妙之旅

目录一、HTTP 协议基础入门1.1 HTTP 协议是什么1.2 HTTP 协议的特点1.3 HTTP 请求与响应的结构二、HTTP 应用场景大揭秘2.1 网页浏览2.2 API 调用2.3 文件传输2.4 内容分发网络&#xff08;CDN&#xff09;2.5 流媒体服务三、HTTP 应用实例深度剖析3.1 使用 JavaScript 的 fetc…

uvm_config_db examples

通过uvm_config_db类访问的UVM配置数据库,是在多个测试平台组件之间传递不同对象的绝佳方式。 methods 有两个主要函数用于从数据库中放入和检索项目,分别是 set() 和 get()。 static function void set ( uvm_component cntxt,string inst_name,string …

(C++)任务管理系统(文件存储)(正式版)(迭代器)(list列表基础教程)(STL基础知识)

目录 前言&#xff1a; 源代码&#xff1a; 代码解析&#xff1a; 一.头文件和命名空间 1. #include - 输入输出功能2. #include - 链表容器3. #include - 字符串处理4. using namespace std; - 命名空间 可视化比喻&#xff1a;建造房子 &#x1f3e0; 二.menu()函数 …

Java 中的异步编程详解

前言 在现代软件开发中&#xff0c;异步编程&#xff08;Asynchronous Programming&#xff09; 已经成为构建高性能、高并发应用程序的关键技术之一。Java 作为一门广泛应用于后端服务开发的语言&#xff0c;在其发展过程中不断引入和优化异步编程的支持。从最初的 Thread 和…

MySQL逻辑删除与唯一索引冲突解决

问题背景 在MySQL数据库设计中&#xff0c;逻辑删除&#xff08;软删除&#xff09;是一种常见的实践&#xff0c;它通过设置标志位&#xff08;如is_delete&#xff09;来标记记录被"删除"&#xff0c;而不是实际删除数据。然而&#xff0c;当表中存在唯一约束时&am…

php命名空间用正斜杠还是反斜杠?

在PHP中&#xff0c;命名空间使用反斜杠&#xff08;\&#xff09;作为分隔符&#xff0c;这是PHP语言规范明确规定的。反斜杠在命名空间中扮演路径分隔的角色&#xff0c;用于区分不同层级的命名空间。 具体说明&#xff1a;语法规则 PHP命名空间使用反斜杠&#xff08;\&…

《从依赖纠缠到接口协作:ASP.NET Core注入式开发指南》

在C#的ASP.NET Core开发中&#xff0c;依赖注入绝非简单的技术技巧&#xff0c;而是重构代码关系的底层逻辑。它像一套隐形的神经网络&#xff0c;让程序模块摆脱硬编码的束缚&#xff0c;在运行时实现动态连接&#xff0c;从而为系统注入可测试、可进化的核心生命力。理解其深…

星云ERP本地环境搭建笔记

看到星云ERP两个比较实用的功能&#xff0c;编号规则和打印模板&#xff0c;如下图所示&#xff0c;于是本地跑起来学习学习。开发环境必备&#xff1a;1. JDK 1.82. MySQL 5.73. Redis 44. RabbitMQ 3.12.45. nodejs 206. pnpm 9.7.1 (npm install -g pnpm9.7.1)其他开发工具&…

RedisJSON 的 `JSON.ARRAPPEND`一行命令让数组动态生长

1 、 为什么选择 JSON.ARRAPPEND 在传统的键值模型里&#xff0c;若要往数组尾部追加元素&#xff0c;通常需要 取→改→写 三步&#xff1a; GET 整个 JSON&#xff1b;在应用层把元素 push 进数组&#xff1b;SET 回 Redis。 一条 JSON.ARRAPPEND 则可一次完成&#xff0c;具…

14:00开始面试,14:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到4月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Unity物理系统由浅入深第四节:物理约束求解与稳定性

Unity物理系统由浅入深第一节&#xff1a;Unity 物理系统基础与应用 Unity物理系统由浅入深第二节&#xff1a;物理系统高级特性与优化 Unity物理系统由浅入深第三节&#xff1a;物理引擎底层原理剖析 Unity物理系统由浅入深第四节&#xff1a;物理约束求解与稳定性 物理引擎的…

深入浅出Kafka Consumer源码解析:设计哲学与实现艺术

一、Kafka Consumer全景架构 1.1 核心组件交互图 #mermaid-svg-JDEEOd2M5PzLkYa6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JDEEOd2M5PzLkYa6 .error-icon{fill:#552222;}#mermaid-svg-JDEEOd2M5PzLkYa6 .erro…

Matplotlib(一)- 数据可视化与Matplotlib

文章目录一、数据可视化1. 数据可视化的概念2. 数据可视化流程3. 数据可视化目的4. 常见的可视化图表4.1 折线图4.2 柱形图4.3 条形图4.4 堆积图4.4.1 堆积面积图4.4.2 堆积柱形图和堆积条形图4.5 直方图4.6 箱形图4.7 饼图4.8 散点图4.9 气泡图4.10 误差棒图4.11 雷达图二、Py…

传输层协议UDP原理

端口号回顾端口号的作用类似pid&#xff0c;用来标识进程的唯一性。只是为了与系统解耦&#xff0c;所以有了端口号。通过ip来确定唯一主机&#xff0c;再通过端口号找到指定的进程。就可以让全网内唯一的两个进程通信了。所以一个完整的报文至少要携带ip和端口号&#xff0c;i…

【牛客刷题】小红的数字删除

文章目录 一、题目介绍1.1 题目描述1.2 输入描述:1.3 输出描述:1.4 示例11.5 示例2二、解题思路2.1 核心观察2.2 关键问题处理三、算法实现四、算法分析4.1 算法流程图4.2 为什么这么设计算法?4.3 算法复杂度五、模拟演练数据示例1: "103252"示例2: "333&quo…

《大数据技术原理与应用》实验报告三 熟悉HBase常用操作

目 录 一、实验目的 二、实验环境 三、实验内容与完成情况 3.1 用Hadoop提供的HBase Shell命令完成以下任务 3.2 现有以下关系型数据库中的表和数据&#xff0c;要求将其转换为适合于HBase存储的表并插入数据&#xff1a; 四、问题和解决方法 五、心得体会 一、实验目的…

微服务初步入门

服务拆分原则 单一职责原则 单一职责原则原本是面向对象设计的一个基本原则&#xff0c;是指一个类应该专注于单一的功能&#xff0c;不要存在多于一个导致类变更的原因 在微服务架构中&#xff0c;是指一个微服务只负责一个功能或者业务领域&#xff0c;每个服务应该由清晰的定…

Liunx操作系统笔记5

用户管理命令&#xff1a; useradd命令&#xff1a; useradd命令的功能是创建并设置用户信息。使用useradd命令可以自动完成用户信息、基本组、家目录等的创建工作&#xff0c;并在创建过程中对用户初始信息进行定制。语法格式:useradd 参数 用户名常用参数: -M 不建立用…

spring-ai-alibaba 接入Tushare查询股票行情

最近spring-ai-alibaba主干分支新增了对Tushare的支持&#xff0c;一起来看看如何使用简单样例老样子&#xff0c;分三步进行&#xff1a;第一步&#xff1a;添加依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-aliba…