有哪些更加簡潔的for循環?循環語句?

目錄

簡潔的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…