有哪些更加简洁的for循环?循环语句?

发布于:2025-07-15 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

简洁的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等语言软件开发技能技巧经验的公众号)


网站公告

今日签到

点亮在社区的每一天
去签到