网站首页 > 基础教程 正文
循环语句一般分为while/for/do-while三种。
- while是if语句重复执行的优化版,如果没有while,就需要用if和goto组合代替。
- for循环是条件和变化简单的while语句的优化版。
- C/ObjC/C++/Java/C#/Kotlin 等都支持这三种形式。
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 等均支持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可让编译器做并行优化。
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
猜你喜欢
- 2024-12-26 C#如何获取计算机或硬件信息 c#获取其他程序界面内容
- 2024-12-26 C#中把PDF导出为图片的方法分享 c# 生成 pdf
- 2024-12-26 C# 操作Excel文件之NPOI (一) c#操作excel文件读写
- 2024-12-26 解释C#中的任务并?库(TPL)及其?途
- 2024-12-26 解释 C# 中的任务并?库是如何?作的
- 2024-12-26 NPOI在C#中的用法 c++ npoi
- 2024-12-26 C#程序员参考手册 高清版 c#程序设计实用教程
- 2024-12-26 C#远程唤醒指定客户端代码 c#远程通讯
- 2024-12-26 一起来看看C#的圈复杂度 c# :?
- 2024-12-26 TCP网络编程中connect()、listen()和accept()三者之间的关系
- 05-24php实现三方支付的方法有哪些?
- 05-24CosmicSting 漏洞影响 75% 的 Adobe Commerce 和 Magento 网站
- 05-24Java接口默认方法的奇妙用途
- 05-24抽象类和接口
- 05-24详解Java抽象类和接口
- 05-24拒绝接口裸奔!开放API接口签名验证
- 05-24每天学Java!Java中的接口有什么作用
- 05-24Java:在Java中使用私有接口方法
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)